tcpdump ist ein Computerprogramm zur Datennetzwerk-Paketanalyse. Es ermöglicht dem Benutzer, Netzwerkpakete (einschließlich TCP/IP) anzuzeigen, die über ein Netzwerk gesendet oder empfangen werden. In diesem kurzen Artikel werde ich zeigen, wie man mit tcpdump eine Paketerfassung für die Analyse des Netzwerkverkehrs durchführt.
Netzwerkschnittstellen auflisten
Tcpdump benötigt Zugriff auf Ihre Netzwerkkarte, also führen Sie die folgenden Befehle als root aus (mit su oder sudo ). Um die Liste der auf dem System verfügbaren Netzwerkschnittstellen zu drucken, auf denen tcpdump Pakete erfassen kann, führen Sie
aus# tcpdump -D
In meinem Fall verwende ich die „echte“ Netzwerkkarte, enp3s0.
Pakete erfassen
Öffnen Sie einen Webbrowser (nur um etwas Netzwerkverkehr zu generieren) und führen Sie den folgenden Befehl aus:
# tcpdump -i <interface>
Auch wenn keine Website geöffnet ist, sehen Sie möglicherweise einige Netzwerkaktivitäten. Vielleicht bedeutet „einige“ viel Netzwerkaktivität. Beenden Sie mit Strg-C und sehen Sie sich die Ergebnisse an. Die Ausgabe zeigt ein Paket pro Zeile mit den folgenden Informationen:
- Zeitstempel
- Protokoll (IP6 für IPv6, IP für IPv4)
- Ursprungshost (IP oder Hostname) und Port
- Zielhost (auch IP oder Hostname) und Port
- TCP-Flags
- Laufende Nummer
- ACK-Nummer
- Fenstergröße
- TCP-Optionen
- Datenlänge
Einschränkung der Ausgabe
tcpdump -i <interface> -c <n>
Mit diesem Befehl wird das Programm beendet, nachdem n empfangen wurde Pakete
Auf dem Screenshot ist ein sleep 2 zu sehen Befehl, der vor tcpdump ausgeführt wird. Dies war nur, um mir 2 Sekunden Zeit zu geben, um Wikipedia in meinen Browser zu laden. Aber es ist die gleiche Art von Ausgabe wie zuvor.
Namen verbergen
tcpdump -i <interface> -n
Mit dem Schalter -n konvertiert tcpdump IP-Adressen oder Portnummern nicht in Namen.
Filter
Sie können tcpdump anweisen, nur bestimmte Pakete zu erfassen. Um beispielsweise nur https-Pakete zu erfassen, oder genauer gesagt Pakete an Port 443, fügen Sie den Ausdruck hinzu:
tcpdump -i <interface> port <portnumber or portname>
Wir können auch Pakete zu oder von einem Host mit dem folgenden Ausdruck erfassen
tcpdump -i <interface> host <ip address or hostname>
Oder wir können Pakete eines Protokolls erfassen mit:
tcpdump -i <interface> proto <protocol>
Wobei das Protokoll eines der folgenden sein kann:icmp, icmp6, igmp, igrp, pim, ah, esp, vrrp, udp oder tcp. Für icmp, tcp und udp können Sie das Schlüsselwort proto weglassen.
Wir können auch mehrere Ausdrücke mit „und“ (oder „&&“), „oder“ (oder „||“) und nicht (oder „!“) kombinieren und mit Klammern gruppieren. Es gibt noch viel mehr Filter, die Sie erstellen können, sehen Sie sich die pcap-filter Manpage an (man pcap-filter ) für die Hilfe zur Syntax.
Ausführlichkeit der Ausgabe erhöhen
Verwenden Sie den Parameter -v, um die Ausführlichkeit zu erhöhen. Aus der tcpdump-Manpage:
-v Beim Analysieren und Drucken (etwas mehr) ausführliche Ausgabe erzeugen. So werden beispielsweise die Lebensdauer, Identifikation, Gesamtlänge und Optionen in einem IP-Paket aufgedruckt. Aktiviert außerdem zusätzliche Paketintegritätsprüfungen wie die Überprüfung der IP- und ICMP-Header-Prüfsumme.
-vv Noch ausführlichere Ausgabe. Beispielsweise werden zusätzliche Felder aus NFS-Antwortpaketen gedruckt und SMB-Pakete werden vollständig dekodiert.
-vvv Noch ausführlichere Ausgabe. Beispielsweise werden die Optionen telnet SB … SE vollständig gedruckt. Mit -X werden Telnet-Optionen ebenfalls in Hex ausgegeben.
Speichern Sie die Aufnahme in einer Datei
Um die Pakete zur späteren Analyse in eine Datei zu schreiben, fügen Sie -w zur Befehlszeile hinzu:
tcpdump -i <interface> -w <filename>
Sie können diese Datei später mit dem Flag -r
lesentcpdump -r <file>
Oder Sie können diese Datei später mit einem GUI-Tool wie Wireshark öffnen.
Moment mal… Wireshark kann auch Netzwerkpakete erfassen, warum habe ich das nicht von Anfang an genutzt?
True, Wireshark kann Pakete erfassen, und die Ausgabe ist auch viel klarer und einfacher zu verfolgen und zu lesen. Mit Wireshark muss ich mir nicht einmal eine Befehlszeile merken oder die Manpage, den Blogartikel oder zumindest ein Cheatsheet in der Hand halten. Auch wahr. Ich hätte Wireshark verwenden können, anstatt die Analyse des Netzwerkverkehrs mit tcpdump durchzuführen. Aber manchmal muss ich die Aufnahme auf einem Server oder Router machen, und bei dieser Art von Computern möchte ich nicht einige wertvolle CPU-Zyklen oder Speicherbits beim Zeichnen von Fenstern, Farben oder Schaltflächen oder einigen anderen GUI-Widgets verschwenden.
Und deshalb entscheide ich mich dafür, die Analyse des Netzwerkverkehrs mit tcpdump auf der Befehlszeile durchzuführen, wenn ich es eilig habe. Oder speichern Sie die Ausgabe in einer Datei, die ich dann mit Wireshark übertrage.