Website-Suche

ngrep – Ein Netzwerkpaketanalysator für Linux


Ngrep (network grep) ist ein einfacher, aber leistungsstarker Netzwerkpaketanalysator. Es handelt sich um ein Grep-ähnliches Tool, das auf der Netzwerkebene angewendet wird – es gleicht den über eine Netzwerkschnittstelle fließenden Datenverkehr ab. Sie können damit einen erweiterten regulären oder hexadezimalen Ausdruck angeben, der mit Datennutzlasten (den tatsächlichen Informationen oder Nachrichten in übertragenen Daten, aber nicht automatisch generierten Metadaten) von Paketen abgeglichen wird.

Dieses Tool funktioniert mit verschiedenen Protokolltypen, darunter IPv4/6, TCP, UDP, ICMPv4/6, IGMP sowie Raw auf einer Reihe von Schnittstellen. Es funktioniert auf die gleiche Weise wie das Paket-Sniffing-Tool tcpdump.

Das Paket ngrep kann wie gezeigt aus den Standardsystem-Repositorys in Mainstream-Linux-Distributionen mithilfe des Paketverwaltungstools installiert werden.

sudo apt install ngrep
sudo yum install ngrep
sudo dnf install ngrep

Nach der Installation von ngrep können Sie anhand der folgenden Beispiele mit der Analyse des Datenverkehrs in Ihrem Linux-Netzwerk beginnen.

1. Mit dem folgenden Befehl können Sie alle Ping-Anfragen auf der Standardarbeitsoberfläche abgleichen. Sie müssen ein anderes Terminal öffnen und versuchen, einen anderen Remote-Computer anzupingen. Das Flag -q weist ngrep an, leise zu arbeiten und keine anderen Informationen als Paket-Header und deren Nutzdaten auszugeben.

sudo ngrep -q '.' 'icmp'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( icmp ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

I 192.168.0.104 -> 192.168.0.103 8:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]...~oG[....j....................... !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.104 -> 192.168.0.103 8:0
  ]....oG[............................ !"#$%&'()*+,-./01234567                                                                                                             

I 192.168.0.103 -> 192.168.0.104 0:0
  ]....oG[............................ !"#$%&'()*+,-./01234567  

Sie können Strg + C drücken, um es zu beenden.

2. Um nur den Datenverkehr abzugleichen, der zu einer bestimmten Zielseite geht, zum Beispiel „google.com“, führen Sie den folgenden Befehl aus und versuchen Sie dann, über einen Browser darauf zuzugreifen.

sudo ngrep -q '.' 'host google.com'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( host google.com ) and ((ip || ip6) || (vlan && (ip || ip6)))
match: .

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  ..................;.(...RZr..$....s=..l.Q+R.U..4..g.j..I,.l..:{y.a,....C{5>[email ..                                                                       

T 172.217.160.174:443 -> 192.168.0.103:54008 [AP]
  .............l.......!,0hJ....0.%F..!...l|.........PL..X...t..T.2DC..... ..y...~Y;[email 

3. Wenn Sie im Internet surfen, führen Sie den folgenden Befehl aus, um zu überwachen, welche Dateien Ihr Browser anfordert:.

sudo ngrep -q '^GET .* HTTP/1.[01]'

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ((ip || ip6) || (vlan && (ip || ip6)))
match: ^GET .* HTTP/1.[01]

T 192.168.0.104:43040 -> 172.217.160.174:80 [AP]
  GET / HTTP/1.1..Host: google.com..User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; 
  GNU C 4.8.5; text)..Accept: */*..Accept-Language: en,*;q=0.1..Accept-
  Encoding: gzip, deflate, bzip2..Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,
  ISO-8859-5,ISO-8859-6,ISO-8859-7,ISO-8859-8,ISO-8859-9,ISO-8859-10,I
  SO-8859-13,ISO-8859-14,ISO-8859-15,ISO-8859-16,windows-1250,windows-1251,windows-1252,windows-1256,
  windows-1257,cp437,cp737,cp850,cp852,cp866,x-cp866-u,x-mac,x-mac-ce,x-
  kam-cs,koi8-r,koi8-u,koi8-ru,TCVN-5712,VISCII,utf-8..Connection: keep-alive.... 

4. Um alle Aktivitäten über den Quell- oder Zielport 25 (SMTP) anzuzeigen, führen Sie den folgenden Befehl aus.

sudo ngrep port 25

5. Um den netzwerkbasierten Syslog-Verkehr auf das Auftreten des Worts „Fehler“ zu überwachen, verwenden Sie den folgenden Befehl.

 
sudo ngrep -d any 'error' port 514

Wichtig ist, dass dieses Tool Dienst-Portnamen, die in „/etc/services“ (auf Unix-ähnlichen Systemen wie Linux) gespeichert sind, in Portnummern konvertieren kann. Dieser Befehl entspricht dem obigen Befehl.

sudo ngrep -d any 'error' port syslog

6. Sie können ngrep auch auf einem HTTP-Server (Port 80) ausführen. Alle Anfragen werden wie gezeigt an den Zielhost weitergeleitet.

sudo ngrep port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42167 -> 64.90.164.74:80 [AP]
  GET / HTTP/1.1..User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i
  686) Opera 7.21  [en]..Host: www.darkridge.com..Accept: text/html, applicat
  ion/xml;q=0.9, application/xhtml+xml;q=0.9, image/png, image/jpeg, image/gi
  f, image/x-xbitmap, */*;q=0.1..Accept-Charset: iso-8859-1, utf-8, utf-16, *
  ;q=0.1..Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0..Cookie: SQ
  MSESSID=5272f9ae21c07eca4dfd75f9a3cda22e..Cookie2: $Version=1..Connection:
  Keep-Alive, TE..TE: deflate, gzip, chunked, identity, trailers....
##

Wie Sie in der obigen Ausgabe sehen können, werden alle übertragenen HTTP-Header in ihren detaillierten Details angezeigt. Allerdings ist es schwer zu analysieren, also schauen wir uns an, was passiert, wenn Sie den Byline-Modus -W anwenden.

sudo ngrep -W byline port 80

interface: eth0 (64.90.164.72/255.255.255.252)
filter: ip and ( port 80 )
####
T 67.169.59.38:42177 -> 64.90.164.74:80 [AP]
GET / HTTP/1.1.
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686) Opera ...
Host: www.darkridge.com.
Accept: text/html, application/xml;q=0.9, application/xhtml+xml;q=0.9 ...
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1.
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0.
Cookie: SQMSESSID=5272f9ae21c07eca4dfd75f9a3cda22e.
Cookie2: $Version=1.
Cache-Control: no-cache.
Connection: Keep-Alive, TE.
TE: deflate, gzip, chunked, identity, trailers.

7. Um jedes Mal, wenn ein Paket übereinstimmt, einen Zeitstempel im Format JJJJ/MM/TT HH:MM:SS.UUUUUU zu drucken, Verwenden Sie das Flag -t.

sudo ngrep -t -W byline port 80

interface: enp0s3 (192.168.0.0/255.255.255.0)
filter: ( port 80 ) and ((ip || ip6) || (vlan && (ip || ip6)))
####
T 2018/07/12 16:33:19.348084 192.168.0.104:43048 -> 172.217.160.174:80 [AP]
GET / HTTP/1.1.
Host: google.com.
User-Agent: Links (2.13; Linux 4.17.6-1.el7.elrepo.x86_64 x86_64; GNU C 4.8.5; text).
Accept: */*.
Accept-Language: en,*;q=0.1.
Accept-Encoding: gzip, deflate, bzip2.
Accept-Charset: us-ascii,ISO-8859-1,ISO-8859-2,ISO-8859-3,ISO-8859-4,ISO-8859-5,utf-8.
Connection: keep-alive.

8. Um zu vermeiden, dass die überwachte Schnittstelle in den Promiscuous-Modus versetzt wird (in dem sie jedes eingehende Netzwerkpaket vollständig abfängt und liest), fügen Sie das Flag -p hinzu.

sudo ngrep -p -W byline port 80

9. Eine weitere wichtige Option ist -N, die nützlich ist, wenn Sie rohe oder unbekannte Protokolle beobachten. Es weist ngrep an, die Unterprotokollnummer zusammen mit der Einzelzeichen-ID anzuzeigen.

sudo ngrep -N -W byline

Weitere Informationen finden Sie auf der Manpage ngrep.

man ngrep

ngrep Github-Repository: https://github.com/jpr5/ngrep

Das ist alles! Ngrep (network grep) ist ein Netzwerkpaketanalysator, der die BPF-Filterlogik auf die gleiche Weise versteht wie tcpdump. Wir würden gerne Ihre Meinung zu ngrep im Kommentarbereich erfahren.