Tcpdump
tcpdump ist eine freie Software zur Überwachung und Auswertung von Netzwerkverkehr.
Aufgabe
- Kann TCP-Pakete, UDP- und ICMP-Pakete mitschneiden.
- Auswertung von vorher in Dateien gespeicherten Paketen.
- Fehlersuche in Programmen, die über das Netzwerk kommunizieren.
- Fehlersuche im Netzwerkaufbau selbst.
- Aufzeichnung und Darstellung der Kommunikation anderer Benutzer und Computer.
- Kommunikation zwischen Teilnehmern des Netzwerkes überwachen und mitschneiden.
- Passwörter und Benutzerdaten aus dem Netzwerk zu erhalten (durch unverschlüsselte Protokoll Übertragungen).
Allgemeines
- Arbeitet im Textmodus und wird über die Kommandozeile gesteuert.
- Mitgeschnittenen Pakete können alternativ in der grafischen Oberfläche von Wireshark analysiert werden.
- Aufgrund des direkten Zugriffs auf Hardware, meistens Root-Rechte benötigt.
Entwicklung
- Wurde von Van Jacobson, Craig Leres und Steven McCanne geschrieben.
- Wird mittlerweile von vielen anderen weiterentwickelt.
Benutzung
Wird in einem Terminal mit folgendem Befehl gestartet:
tcpdump [FLAGS] [FILTER-OPTIONEN]
- Hinweis
Muss unter Linux mit Root-Rechten ausgeführt werden bzw. das Setuid-Bit gesetzt sein, damit es Pakete mitschneiden kann.
Flags
- Alle Flags sind optional.
- Eine vollständige Liste kann man in der Man-Page von tcpdump finden.
Flag | Bedeutung |
---|---|
-D | Liste aller sniffbaren Netzwerkinterfaces, wenn gesetzt ignoriert es andere Flags |
-i Interface | Welche Netzwerkschnittstelle gesnifft werden soll, falls nicht gesetzt sucht sich tcpdump eine aus (meist die erste LAN-Karte) |
-n | keine Hostnamen auflösen, Portnummern nicht durch ihre Dienste ersetzen. |
-c Anzahl | Nachdem es die angegebene Anzahl Pakete mitgeschnitten hat, beendet sich tcpdump automatisch. |
-e | Ethernet-Header mitschneiden. |
-q | weniger Protokoll-Informationen loggen, Ausgabe wird kleiner. |
-v, -vv, -vvv | Je mehr v's, desto mehr Information über Pakete werden gespeichert. |
-S | absolute statt relative Sequenznummer der Pakete. |
-A | Inhalt eines Paketes als ASCII-Ausgabe |
-x, -xx | Inhalt eines Paketes als Hex-Ausgabe, mit einem x wird der TCP-Header ignoriert. |
-X, -XX | Inhalt eines Paketes als Hex- und ASCII-Ausgabe, mit einem X wird der TCP-Header ignoriert. |
-s Anzahl | Anzahl der Bytes pro Paket, die gesnifft werden sollen. Standard sind 65535, wird durch -s 0 gesetzt. |
-w Dateiname | Schreibt Pakete in die angegebene Datei, diese Pakete sind unformatiert (raw-packets) Dadurch nicht mit cat oder less lesbar Jedoch mit -r Flag parsbar |
-r Dateiname | Parst, formatiert und gibt die Pakete, die mit -w geschrieben wurden, in der Konsole aus. |
-Z Benutzer | Nachdem die zu sniffende Netzwerkschnittstelle bzw. die mit dem -r Flag zu parsende Datei geöffnet worden ist, jedoch bevor irgendeine Ausgabe(datei) gestartet bzw. geöffnet worden ist, wird das Benutzerkonto (UID) von root auf den angegebenen Benutzer und die Gruppe (GID) von root auf die Hauptgruppe des angegebenen Benutzers geändert. |
Filteroptionen
- Eine vollständige Liste kann man in der Man-Page von pcap-filter finden.
- Mehrere Filterangaben können mit and (alternativ &&), or (alternativ ||) und not (alternativ !) miteinander verknüpft werden
- Ohne angegebene Optionen wird immer alles mitgeschnitten
- Keine Hostangabe = alle Hosts.
- Keine Portangabe = alle Ports.
Option | Werte | Bedeutung |
---|---|---|
host | IP-Adresse (oder auch Hostname) | Nur Pakete mitgeschnitten, die entweder als Quelle oder als Ziel die angegebene IP-Adresse besitzen. Es kann auch ein Hostname angegeben werden (aber nur, wenn nicht das -n Flag benutzt wird). |
net | Netzwerk-Bereich in CIDR-Schreibweise | Nur Pakete mitgeschnitten, die entweder als Quelle oder als Ziel eine IP-Adresse aus dem angegebenen Netzwerk-Bereich besitzen. |
port | eine Zahl von 0 bis 65535 | Schneidet Pakete mit, die entweder auf Quell- oder auf Ziel-Seite den angegebenen Port besitzen. |
portrange | 0-65535 | Schneidet Pakete mit, die entweder auf Quell- oder auf Ziel-Seite einen Port in dem angegebenen Portbereich besitzen. |
src | host, net, port oder portrange | Nur Pakete mitgeschnitten, die als Quelle den angegebenen Wert besitzen. |
dst | host, net, port oder portrange | Nur Pakete mitgeschnitten, die als Ziel den angegebenen Wert besitzen. |
proto | ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp und udp |
Netzwerkprotokoll, in dem Pakete mitgeschnitten werden sollen |
Beispiele
Netzwerkschnittstellen ausgeben, welche tcpdump sniffen kann:
tcpdump -D
Ersten 68 Bytes von sämtlichen Paketen, die die Netzwerkschnittstelle wlan0 passieren, mitschneiden:
tcpdump -i wlan0
Alle UDP-Pakete, welche 10.231.11.7 als Ziel haben, mitschneiden:
tcpdump -i wlan0 udp and dst 10.231.11.7
DNS-Requests und deren Antworten mitschneiden. Die Ausgabe ist dabei auf minimal gestellt:
tcpdump -i wlan0 -q udp port 53
Sowohl HTTP-, als auch HTTPS-Pakete:
tcpdump -i wlan0 -q '(tcp port 80) or (tcp port 443)'
Vorheriges Beispiel raw in die Datei output.dump schreiben:
tcpdump -i wlan0 -q -w output.dump '(tcp port 80) or (tcp port 443)'
Vorherige Ausgabedatei parsen und Inhalt formatiert ausgeben:
tcpdump -r output.dump
Interne Links
Weblinks
- https://www.xinux.net/index.php/Tcpdump_grundlagen
- https://www.xinux.net/index.php/Tcpdump_beispiele
- http://mikiwiki.org/wiki/tcpdump
- https://mirrors.deepspace6.net/Linux+IPv6-HOWTO-de/examples-tcpdump.html
- https://wiki.ubuntuusers.de/tcpdump/
- https://de.wikipedia.org/wiki/Tcpdump
- https://hackertarget.com/tcpdump-examples/
- https://www.howtoforge.com/linux-tcpdump-command/
- https://www.howtoforge.de/anleitung/linux-tcpdump-command-tutorial-fr-anfnger-8-beispiele/