tcpdump — Netzwerkverkehr auf der Kommandozeile analysieren
Praxis-Guide zu tcpdump — dem klassischen CLI-Paketanalyzer: Netzwerkverkehr aufzeichnen, BPF-Filter einsetzen und Protokolle debuggen.
tcpdump ist der klassische Paketanalyzer für die Kommandozeile: Mit BPF-Filtern grenzt du den Mitschnitt auf genau den Verkehr ein, den du untersuchen möchtest – einen einzelnen Host, ein bestimmtes Port oder einen TCP-Flag-Zustand. Ob du ein Netzwerkproblem diagnostizierst, ein Protokoll debuggst oder verdächtigen Verkehr analysierst – tcpdump liefert dir die Rohdaten direkt aus dem Kernel, ohne Umwege über eine GUI.
Pakete aufzeichnen
tcpdump — Zeichnet alle Pakete auf dem Standard-Interface auf. Benötigt Root-Rechte.
sudo tcpdumptcpdump -i INTERFACE — Zeichnet auf einem bestimmten Interface auf.
sudo tcpdump -i eth0tcpdump -i any — Zeichnet auf allen Interfaces gleichzeitig auf.
sudo tcpdump -i anytcpdump -c COUNT — Zeichnet eine bestimmte Anzahl von Paketen auf und beendet sich dann.
sudo tcpdump -c 100tcpdump -D — Listet alle verfügbaren Netzwerk-Interfaces auf.
tcpdump -DAusgabe-Optionen
tcpdump -n — Numerische Ausgabe – Hostnamen nicht auflösen.
sudo tcpdump -ntcpdump -nn — Hostnamen und Portnamen nicht auflösen.
sudo tcpdump -nntcpdump -v — Ausführliche Ausgabe – zeigt TTL, Kennung, Gesamtlänge, IP-Optionen.
sudo tcpdump -vtcpdump -vv — Noch ausführlicher – zusätzliche Details auf Protokollebene.
sudo tcpdump -vvtcpdump -vvv — Maximale Ausführlichkeit.
sudo tcpdump -vvvtcpdump -q — Kompakte Ausgabe – weniger Protokollinformationen pro Zeile.
sudo tcpdump -qtcpdump -e — Zeigt Link-Layer-Header (Ethernet) mit MAC-Adressen.
sudo tcpdump -etcpdump -t — Zeitstempel nicht ausgeben.
sudo tcpdump -ttcpdump -tt — UNIX-Epoch-Zeitstempel ausgeben.
sudo tcpdump -tttcpdump -ttt — Zeit-Delta zwischen Paketen ausgeben.
sudo tcpdump -ttttcpdump -tttt — Datum und Uhrzeit in lesbarem Format ausgeben.
sudo tcpdump -ttttPaketinhalt anzeigen
tcpdump -X — Paketdaten in Hex und ASCII ausgeben.
sudo tcpdump -X -c 5tcpdump -XX — Paketdaten in Hex und ASCII inklusive Link-Layer-Header ausgeben.
sudo tcpdump -XX -c 5tcpdump -A — Paketdaten nur in ASCII ausgeben. Praktisch zum Lesen von HTTP-Verkehr.
sudo tcpdump -A port 80tcpdump -s SIZE — Snapshot-Länge in Bytes festlegen (Standard: 262144). 0 für vollständige Pakete.
sudo tcpdump -s 0tcpdump -s 96 — Nur Header aufzeichnen (96 Bytes). Spart Speicherplatz bei großen Mitschnitten.
sudo tcpdump -s 96Datei-Operationen
tcpdump -w FILE — Aufgezeichnete Pakete in eine pcap-Datei schreiben.
sudo tcpdump -w capture.pcaptcpdump -r FILE — Pakete aus einer pcap-Datei lesen und anzeigen.
tcpdump -r capture.pcaptcpdump -r FILE -nn — pcap-Datei mit numerischer Ausgabe lesen.
tcpdump -r capture.pcap -nntcpdump -w FILE -C SIZE_MB — Aufzeichnungsdatei nach SIZE Megabyte rotieren.
sudo tcpdump -w capture.pcap -C 100tcpdump -w FILE -W COUNT -C SIZE_MB — Durch COUNT Dateien rotieren, jede bis zu SIZE MB (Ringpuffer).
sudo tcpdump -w capture.pcap -W 5 -C 100tcpdump -w FILE -G SECONDS — Aufzeichnungsdatei alle SECONDS Sekunden rotieren. strftime-Format im Dateinamen verwenden.
sudo tcpdump -w capture_%Y%m%d_%H%M%S.pcap -G 3600BPF-Filter — Host & Netzwerk
tcpdump host HOST — Verkehr zu oder von einem bestimmten Host aufzeichnen.
sudo tcpdump host 192.168.1.1tcpdump src host HOST — Verkehr von einem bestimmten Absender aufzeichnen.
sudo tcpdump src host 192.168.1.100tcpdump dst host HOST — Verkehr zu einem bestimmten Ziel aufzeichnen.
sudo tcpdump dst host 8.8.8.8tcpdump net NETWORK/CIDR — Verkehr zu oder von einem Netzwerk aufzeichnen.
sudo tcpdump net 192.168.1.0/24tcpdump src net NETWORK/CIDR — Verkehr aus einem Netzwerk aufzeichnen.
sudo tcpdump src net 10.0.0.0/8BPF-Filter — Port & Protokoll
tcpdump port PORT — Verkehr auf einem bestimmten Port aufzeichnen (TCP und UDP).
sudo tcpdump port 80tcpdump src port PORT — Verkehr von einem bestimmten Quell-Port aufzeichnen.
sudo tcpdump src port 443tcpdump dst port PORT — Verkehr zu einem bestimmten Ziel-Port aufzeichnen.
sudo tcpdump dst port 22tcpdump portrange START-END — Verkehr auf einem Port-Bereich aufzeichnen.
sudo tcpdump portrange 8000-9000tcpdump tcp — Nur TCP-Verkehr aufzeichnen.
sudo tcpdump tcptcpdump udp — Nur UDP-Verkehr aufzeichnen.
sudo tcpdump udptcpdump icmp — Nur ICMP-Verkehr aufzeichnen.
sudo tcpdump icmptcpdump arp — Nur ARP-Verkehr aufzeichnen.
sudo tcpdump arptcpdump ip6 — Nur IPv6-Verkehr aufzeichnen.
sudo tcpdump ip6BPF-Filter — Verknüpfen
tcpdump host HOST and port PORT — Filter mit AND verknüpfen.
sudo tcpdump host 192.168.1.1 and port 80tcpdump port 80 or port 443 — Filter mit OR verknüpfen.
sudo tcpdump port 80 or port 443tcpdump not port PORT — Bestimmten Verkehr mit NOT ausschließen.
sudo tcpdump not port 22tcpdump 'host HOST and (port 80 or port 443)' — Klammern zur Gruppierung verwenden (Ausdruck in Anführungszeichen setzen).
sudo tcpdump 'host 192.168.1.1 and (port 80 or port 443)'tcpdump 'not (port 22 or port 53)' — Mehrere Ports ausschließen.
sudo tcpdump 'not (port 22 or port 53)'Erweiterte Filter
tcpdump 'tcp[tcpflags] & (tcp-syn) != 0' — Nur TCP-SYN-Pakete aufzeichnen (neue Verbindungen).
sudo tcpdump 'tcp[tcpflags] & (tcp-syn) != 0'tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn' — Nur initiale SYN-Pakete aufzeichnen (SYN ohne ACK).
sudo tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'tcpdump 'tcp[tcpflags] & (tcp-rst) != 0' — TCP-RST-Pakete aufzeichnen. Hilfreich zum Auffinden abgelehnter Verbindungen.
sudo tcpdump 'tcp[tcpflags] & (tcp-rst) != 0'tcpdump 'tcp[tcpflags] & (tcp-fin) != 0' — TCP-FIN-Pakete aufzeichnen (Verbindungsabbau).
sudo tcpdump 'tcp[tcpflags] & (tcp-fin) != 0'tcpdump greater SIZE — Nur Pakete größer als SIZE Bytes aufzeichnen.
sudo tcpdump greater 500tcpdump less SIZE — Nur Pakete kleiner als SIZE Bytes aufzeichnen.
sudo tcpdump less 100tcpdump ether host MAC — Verkehr zu/von einer bestimmten MAC-Adresse aufzeichnen.
sudo tcpdump ether host aa:bb:cc:dd:ee:fftcpdump vlan VLANID — Verkehr auf einem bestimmten VLAN aufzeichnen.
sudo tcpdump vlan 100Typische Aufzeichnungs-Muster
tcpdump -i eth0 -nn -c 100 -w capture.pcap — Schneller Mitschnitt: 100 Pakete, numerisch, in Datei gespeichert.
sudo tcpdump -i eth0 -nn -c 100 -w capture.pcaptcpdump -i any -nn port 80 -A — HTTP-Verkehr in ASCII auf allen Interfaces beobachten.
sudo tcpdump -i any -nn port 80 -Atcpdump -i any -nn port 53 — DNS-Anfragen und -Antworten überwachen.
sudo tcpdump -i any -nn port 53tcpdump -i eth0 -nn icmp — ICMP-Verkehr überwachen (Ping, Traceroute, Unreachable).
sudo tcpdump -i eth0 -nn icmptcpdump -i any -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn' — Alle neuen eingehenden TCP-Verbindungen beobachten.
sudo tcpdump -i any -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'tcpdump -i any -nn host HOST and not port 22 — Gesamten Verkehr zu/von einem Host außer SSH überwachen.
sudo tcpdump -i any -nn host 192.168.1.1 and not port 22tcpdump -r capture.pcap -nn 'tcp[tcpflags] & (tcp-rst) != 0' — RST-Pakete in einer aufgezeichneten Datei suchen.
tcpdump -r capture.pcap -nn 'tcp[tcpflags] & (tcp-rst) != 0'tcpdump -i eth0 -tttt -nn -s0 -w long_capture.pcap & — Hintergrundmitschnitt mit Zeitstempeln und vollständigen Paketdaten.
sudo tcpdump -i eth0 -tttt -nn -s0 -w long_capture.pcap & Fazit
tcpdump ist unverzichtbar, sobald du wissen musst, was wirklich über das Kabel geht – kein Logging-Framework zeigt dir das zuverlässiger. Speichere Mitschnitte mit -w als pcap-Datei und öffne sie später in Wireshark für eine grafische Auswertung. Für die schnelle Triage auf einem entfernten Server reicht tcpdump allein.
Weiterführende Links
- tcpdump – offizielle Projektseite – Downloads und Dokumentation (englisch)
- tcpdump(1) – Manpage – alle Optionen und BPF-Filter-Referenz (englisch)
- tcpdump – Wikipedia – Hintergrund und Geschichte (englisch)