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 -rn zeigt 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

  1. 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 pauschales sudo für alle Mitschitte ist nicht nötig.
  2. Verschlüsselung: Bei TLS sieht man keine Inhalte. Das ist der Zweck von Verschlüsselung, nicht ein Werkzeugmangel.
  3. 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.
  4. 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 -B erhöhen.
  5. 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.
  6. 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:

  1. Hypothese bilden: Was glaubt man, wo der Fehler liegt?
  2. Gezielt mitschneiden: Nur der vermutete Verkehr, mit Zeitlimit und Paketgrenze.
  3. Handschlag prüfen: Kommt die Anfrage an? Antwortet die Gegenseite? Ist der Port offen?
  4. 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.