ngrep - Ein Netzwerk-Paketanalysator für Linux
Ngrep (Network grep) ist ein einfacher, aber leistungsstarker Netzwerkpaketanalysator. Es handelt sich um ein grep-ähnliches Tool, das auf die Netzwerkschicht angewendet wird – es gleicht den Datenverkehr ab, der über eine Netzwerkschnittstelle läuft. Sie ermöglicht es Ihnen, einen erweiterten regulären oder hexadezimalen Ausdruck anzugeben, 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 Arten von Protokollen, 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 aus den Standard-System-Repositories in Mainstream-Linux-Distributionen mit dem Paketverwaltungstool installiert werden, wie gezeigt.
$ 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. Der folgende Befehl hilft Ihnen, alle Ping-Anfragen auf der standardmäßigen Arbeitsoberfläche abzugleichen. 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 Paketheader und deren Nutzlasten 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 Zielwebsite führt, z. B. "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. Führen Sie den folgenden Befehl aus, um alle Aktivitäten anzuzeigen, die den Quell- oder Zielport 25 (SMTP) überschreiten.
$ sudo ngrep port 25
5. Verwenden Sie den folgenden Befehl, um den netzwerkbasierten Syslog-Datenverkehr auf das Auftreten des Wortes "Fehler" zu überwachen.
sudo ngrep -d any 'error' port 514
Wichtig ist, dass dieses Tool in der Lage ist, in "/etc/services" gespeicherte Service-Portnamen (auf Unix-ähnlichen Systemen wie Linux) in Portnummern umzuwandeln. Dieser Befehl entspricht dem obigen Befehl.
$ sudo ngrep -d any 'error' port syslog
6. Sie können ngrep auch gegen einen HTTP-Server (Port 80) ausführen, der alle Anfragen an den Zielhost abgleicht, wie gezeigt.
$ 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 HTTP-Header in ihren blutigen Details angezeigt. Es ist jedoch 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 einen Zeitstempel in der Form JJJJ/MM/TT HH:MM:SS zu drucken. UUUUUU Jedes Mal, wenn ein Paket abgeglichen wird, 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 ankommende 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, falls Sie rohe oder unbekannte Protokolle beobachten. Es weist ngrep an, die Nummer des Unterprotokolls zusammen mit der einstelligen Kennung 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 wissen, was Sie über ngrep in den Kommentaren denken.