tcpdump ist das Standardwerkzeug, um Netzwerkverkehr auf der Kommandozeile mitzuschneiden. Wer wissen will, was wirklich über die Leitung geht – statt zu vermuten – kommt an ihm nicht vorbei. Der Artikel zeigt Filter, Auswertung und die Beschränkungen.
Grundaufruf und wichtige Optionen
# Schnittstellen auflisten
tcpdump -D
ip -br link
# Alles auf eth0 mitschneiden
sudo tcpdump -i eth0
# Die wichtigsten Optionen
sudo tcpdump -i eth0 \
-n \ # keine Namensaufloesung (schneller und eindeutiger!)
-nn \ # auch Ports nicht aufloesen
-c 20 \ # nach 20 Paketen aufhoeren
-s 0 \ # ganze Pakete aufnehmen (nicht abschneiden)
-tttt \ # Zeitstempel im Klartext
-w /tmp/mitschnitt.pcap # in Datei schreiben statt auf den Bildschirm
# Datei auswerten
sudo tcpdump -r /tmp/mitschnitt.pcap -n | head -50
Filter: der wichtigste Teil
Ein ungefilterter Mitschnitt ist auf einem beschäftigten Server unbrauchbar – er zeigt Pakete im Sekundentakt und verdeckt das gesuchte Problem. Filter sind deshalb nicht optional, sondern Voraussetzung.
# Nach Host
tcpdump -i eth0 -n host 10.0.0.50
tcpdump -i eth0 -n src 10.0.0.50 # nur von dort
tcpdump -i eth0 -n dst 10.0.0.50 # nur dorthin
# Nach Netz
tcpdump -i eth0 -n net 10.0.0.0/24
# Nach Port
tcpdump -i eth0 -n port 443
tcpdump -i eth0 -n port 53
tcpdump -i eth0 -n 'tcp port 80 or tcp port 443'
# Nach Protokoll
tcpdump -i eth0 -n icmp
tcpdump -i eth0 -n arp
tcpdump -i eth0 -n udp
# Verknuepfungen (und/oder/nicht)
tcpdump -i eth0 -n 'host 10.0.0.50 and tcp port 5432'
tcpdump -i eth0 -n 'not port 22 and not arp'
# Nur TCP-Flags - sehr nuetzlich
tcpdump -i eth0 -n 'tcp[tcpflags] & tcp-syn != 0' # nur SYN
tcpdump -i eth0 -n 'tcp[tcpflags] & tcp-rst != 0' # nur RST
tcpdump -i eth0 -n 'tcp[tcpflags] == tcp-syn' # nur reine SYN
# Groesse
tcpdump -i eth0 -n 'greater 1000'
tcpdump -i eth0 -n 'less 100'
# Auf eine Datei begrenzen (Rotation) - fuer laengere Mitschnitte
tcpdump -i eth0 -n -w /tmp/m.pcap -C 100 -W 5
# -C 100: alle 100 MB neue Datei -W 5: hoechstens 5 Dateien
Ausgabe lesen
# Beispielzeile
14:23:07.120834 IP 10.0.0.11.54321 > 10.0.0.50.443: Flags [S], seq 1234, win 64240, length 0
# Aufbau:
# 14:23:07.120834 Zeitstempel
# IP Protokoll
# 10.0.0.11.54321 Quelladresse und -port
# 10.0.0.50.443 Zieladresse und -port
# Flags [S] TCP-Flags: S=SYN, .=ACK, F=FIN, R=RST, P=PSH
# length 0 Nutzdatenlaenge
# Flags im Zusammenhang lesen
# [S] Verbindungsaufbau (SYN)
# [S.] Antwort beim Aufbau (SYN+ACK)
# [.] reine Bestaetigung
# [P.] Daten werden uebertragen
# [F.] geordnetes Beenden
# [R] Abbruch (RST) - Port geschlossen oder Verbindung abgelehnt
Ein [R] ist die häufigste und nützlichste Beobachtung: Es bedeutet fast immer, dass der Zielport nicht offen ist. Ein [S] ohne [S.] bedeutet, dass die Anfrage das Ziel erreicht, aber keine Antwort kommt – ein Hinweis auf eine blockierende Firewall, die verwirft statt abzulehnen.
Inhalt sichtbar machen
# Nutzdaten als Text anzeigen
sudo tcpdump -i eth0 -n -A 'tcp port 80'
# Hexadezimal und ASCII nebeneinander
sudo tcpdump -i eth0 -n -X 'tcp port 80'
# In Wireshark oeffnen (lesbare Analyse)
sudo tcpdump -i eth0 -n -s 0 -w /tmp/mitschnitt.pcap 'host 10.0.0.50'
# Datei herunterladen und in Wireshark mit grafischer Auswertung oeffnen
# Bei TLS ist der Inhalt verschluesselt - sichtbar bleiben:
# Zieladresse, Port, Zertifikatsnamen im Handshake, Paketgroessen und -zeiten.
# Fuer mehr braucht man Schluessel oder einen Proxy.
Typische Fragestellungen
- Kommt die Anfrage überhaupt an? Auf dem Zielserver mitschneiden. Nichts zu sehen heißt Firewall, Routing oder falsche Adresse. Zu sehen, aber keine Antwort heißt: die Anwendung lauscht nicht.
- Wer spricht mit wem?
tcpdump -n -c 2000 -i any | awk '{print $3, $5}' | sort | uniq -c | sort -rnzeigt die häufigsten Verbindungspaare. - Ist die Namensauflösung langsam? Mitschnitt auf Port 53 mit Zeitstempeln zeigt, wann die Antwort kommt.
- Läuft der Verbindungsaufbau durch? Ein vollständiger Handschlag ist SYN, SYN+ACK, ACK. Fehlt der zweite Schritt, antwortet der Zielserver nicht. Fehlt der dritte, kommt die Antwort beim Client nicht an.
- Wiederholungen: Dieselben Pakete erscheinen mehrfach mit denselben Sequenznummern – ein häufiges Zeichen für Paketverlust.
Grenzen und Vorsicht
- Rechte: Für den Mitschnitt sind erhöhte Rechte nötig. Um nicht dauerhaft als Administrator zu arbeiten, gibt es Fähigkeiten (capabilities) oder die Gruppe
pcap. Ein pauschalessudofür alle Mitschitte ist nicht nötig. - Verschlüsselung: Bei TLS sieht man keine Inhalte. Das ist der Zweck von Verschlüsselung, nicht ein Werkzeugmangel.
- Datenschutz: Ein Mitschnitt kann personenbezogene Daten enthalten. Dateien gehören nicht ins Verzeichnis für alle und müssen nach der Auswertung gelöscht werden.
- Last: Bei hohem Durchsatz verliert tcpdump Pakete, wenn der Puffer zu klein ist. Der Hinweis packets dropped by kernel erscheint im Betrieb. Abhilfe: gezielter filtern oder Puffergröße mit
-Berhöhen. - Mischverkehr: Auf einem Switch sieht man ohne besondere Konfiguration nur den eigenen Verkehr. Für fremden Verkehr braucht es eine gespiegelte Schnittstelle (SPAN) oder einen TAP.
- Auf Produktivsystemen sparsam einsetzen: Gezielte, kurz laufende Mitschitte statt dauerhaftem Vollmitschnitt.
Vorgehen in der Praxis
Der bewährte Ablauf bei einem Netzwerkproblem hat vier Schritte:
- Hypothese bilden: Was glaubt man, wo der Fehler liegt?
- Gezielt mitschneiden: Nur der vermutete Verkehr, mit Zeitlimit und Paketgrenze.
- Handschlag prüfen: Kommt die Anfrage an? Antwortet die Gegenseite? Ist der Port offen?
- Bei Bedarf verfeinern: Für die tiefere Analyse die Datei in Wireshark öffnen, wo Wiederholungen und Zeitabstände grafisch sichtbar sind.
Verwandte Grundlagen: TCP, ping und traceroute, ss und netstat, Firewall.