VMware ESXi and vSphere Cluster Management
tcpdump-Befehl unter Linux: Netzwerkverkehr mitschneiden und analysieren
Lerne tcpdump unter Linux: Interfaces auswählen, BPF-Filter verwenden, TCP-, UDP- und DNS-Verkehr analysieren, Mitschnitte als pcap speichern und Fehler systematisch finden.
tcpdump ist ein Kommandozeilenprogramm zum Erfassen und Untersuchen von Netzwerkpaketen. Als Paket-Sniffer liest es Verkehr auf einer Netzwerkschnittstelle mit, filtert relevante Pakete und zeigt sie im Terminal an. Alternativ speichert es den Mitschnitt als pcap-Datei für eine spätere Analyse.
Ein Paketmitschnitt ist etwas anderes als eine Übersicht offener Verbindungen. Werkzeuge wie ss zeigen lokale Sockets und deren Zustände. tcpdump zeichnet dagegen einzelne Pakete auf, beispielsweise TCP-Handshakes, DNS-Anfragen, Wiederholungen oder ICMP-Fehler.
Voraussetzungen und Installation
Du solltest das Linux-Terminal, IP-Adressen, Ports sowie die Grundlagen von TCP, UDP und DNS kennen. Für die Aufnahme von Paketen sind normalerweise Root-Rechte oder passende Linux-Capabilities erforderlich. Nutze administrative Rechte möglichst nur für den konkreten Diagnosebefehl.
- Debian und Ubuntu:
sudo apt update && sudo apt install tcpdump - Fedora:
sudo dnf install tcpdump - Arch Linux:
sudo pacman -S tcpdump
Die genauen Paketnamen und Sicherheitsrichtlinien können je nach Distribution abweichen. Eine Ausführung mit sudo ist der übliche Weg, wenn der aktuelle Benutzer keinen direkten Zugriff auf die Capture-Funktion besitzt.
Netzwerkschnittstellen erkennen und auswählen
Eine Netzwerkschnittstelle ist ein physisches oder logisches Netzwerkgerät. Ethernet-Interfaces heißen beispielsweise eth0, ens3 oder enp2s0. WLAN verwendet oft Namen wie wlan0 oder moderne Namen wie wlp2s0. lo ist die Loopback-Schnittstelle für lokale Kommunikation zwischen Prozessen auf demselben Rechner.
sudo tcpdump -D
ip link show
-D listet Interfaces auf, die tcpdump für einen Mitschnitt verwenden kann. Das Systemwerkzeug ip hilft zusätzlich, Status, Adressen und Interface-Namen zu prüfen. Die Pseudo-Schnittstelle any kann Verkehr mehrerer Interfaces zusammenfassen, ist aber nicht für jede Analyse ideal und zeigt nicht immer dieselben Link-Layer-Informationen wie ein einzelnes Interface.
sudo tcpdump -i eth0
sudo tcpdump -i any -nn
sudo tcpdump -i lo -nn tcp port 80
Ersetze eth0 durch den tatsächlichen Namen. Für einen lokalen Webdienst auf Port 80 ist lo wichtig: Der Verkehr verlässt den Rechner nicht und erscheint deshalb möglicherweise nicht auf der Ethernet- oder WLAN-Schnittstelle.
Grundsyntax und erster Mitschnitt
Die grundlegende Form lautet:
sudo tcpdump [Optionen] -i <Interface> [BPF-Filter]
Ohne inhaltlichen Filter versucht tcpdump, sämtlichen sichtbaren Verkehr des gewählten Interfaces auszugeben. Die Ausgabe läuft fortlaufend im Terminal. Beende den Mitschnitt mit Strg+C. Danach zeigt tcpdump eine Statistik an:
- captured: Pakete, die tcpdump erfasst und verarbeitet hat.
- received by filter: Pakete, die den Capture-Filter erreicht haben; die genaue Bedeutung kann je nach Plattform variieren.
- dropped by kernel: Pakete, die der Kernel wegen hoher Last oder zu kleiner Puffer nicht an tcpdump weitergeben konnte.
Die Abschlussstatistik ist ein wichtiger Hinweis auf die Qualität des Mitschnitts. Kernel-Drops bedeuten, dass die Aufzeichnung möglicherweise unvollständig ist.
Wichtige tcpdump-Optionen
| Option | Zweck | Hinweis oder Beispiel |
|---|---|---|
-D | Capture-Interfaces auflisten | sudo tcpdump -D |
-i | Interface auswählen | -i eth0 |
-n | Reverse-DNS-Auflösung unterdrücken | Hosts bleiben numerisch |
-nn | Hosts und Ports numerisch anzeigen | Keine Dienstnamen wie http |
-v | Mehr Details anzeigen | -vv und -vvv erhöhen die Verbosität |
-tttt | Vollständigen Datum-Zeit-Zeitstempel ausgeben | Praktisch für den Vergleich mit Logs |
-A | Nutzdaten als ASCII anzeigen | Nur bei geeigneten, nicht verschlüsselten Protokollen |
-X | ASCII- und Hexadezimalansicht anzeigen | Hilfreich bei Protokoll- und Byte-Analysen |
-c | Nach einer Paketanzahl stoppen | -c 100 |
-s | Snaplen, also aufgezeichnete Paketbytes, festlegen | -s 0 erfasst die vollständige Paketgröße, soweit unterstützt |
-w | Binären Mitschnitt schreiben | -w capture.pcap |
-r | Capture-Datei offline lesen | -r capture.pcap |
-n verhindert die Auflösung von IP-Adressen in Hostnamen. -nn unterdrückt zusätzlich die Zuordnung von Portnummern zu Dienstnamen. Das macht Ausgaben schneller und besser mit Logs vergleichbar. Ohne diese Optionen kann beispielsweise Port 80 als http erscheinen, obwohl technisch weiterhin die Nummer 80 gemeint ist.
Eine Paketzeile lesen
2026-08-19 10:15:22.123456 IP 192.0.2.10.51544 > 198.51.100.20.443: Flags [S], seq 12345, win 64240, length 0
- Der Zeitstempel zeigt, wann tcpdump das Paket beobachtet hat.
IPbeschreibt hier IPv4-Verkehr; IPv6 wird typischerweise alsIP6dargestellt.192.0.2.10.51544enthält Quelladresse und Quellport.198.51.100.20.443enthält Zieladresse und Zielport.Flags [S]bedeutet bei TCP SYN und weist meist auf den Beginn eines Verbindungsaufbaus hin.seqist die TCP-Sequenznummer,windie beworbene TCP-Fenstergröße undlengthdie Länge der TCP-Nutzdaten.
Weitere TCP-Flags sind ACK für eine Bestätigung, FIN für das geordnete Beenden und RST für das Zurücksetzen einer Verbindung. Ein normaler TCP-Handshake besteht aus SYN, SYN-ACK und ACK.
UDP-Zeilen enthalten meist Quell- und Zielport, aber keinen TCP-Handshake. ICMP-Zeilen beschreiben beispielsweise Echo-Anfragen, Antworten oder Fehlermeldungen. ARP arbeitet auf der lokalen Ethernet-Ebene und ordnet IPv4-Adressen MAC-Adressen zu. DNS erscheint häufig als UDP-Verkehr auf Port 53, kann bei größeren Antworten oder bestimmten Situationen aber auch TCP verwenden.
Lesbarkeit und Detailgrad steuern
sudo tcpdump -i eth0 -tttt -nn
sudo tcpdump -i eth0 -vvv -nn icmp
sudo tcpdump -i eth0 -A -s 0 'tcp port 80'
sudo tcpdump -i eth0 -X -s 0 'tcp port 80'
-v, -vv und -vvv zeigen zunehmend ausführliche Protokollinformationen. -tttt eignet sich für zeitliche Korrelationen mit Anwendungs- und Systemlogs. -A stellt Nutzdaten als ASCII dar; -X kombiniert eine hexadezimale Darstellung mit einer lesbaren Ansicht.
Die Nutzdatenanzeige ist begrenzt: TLS- beziehungsweise HTTPS-Inhalte sind normalerweise verschlüsselt und erscheinen nicht als lesbarer HTTP-Inhalt. Binärprotokolle können unleserlich wirken. Außerdem kann die Ausgabe selbst vertrauliche Informationen offenlegen. Verwende sie daher nur in einer autorisierten Test- oder Diagnoseumgebung.
BPF-Filtergrundlagen
Die tcpdump-Filtersprache heißt Berkeley Packet Filter (BPF). Ein BPF-Filter steht nach den Optionen und schränkt bereits während der Erfassung ein, welche Pakete verarbeitet werden. Ein enger Filter reduziert Terminalrauschen, CPU-Last, Dateigröße und Datenschutzrisiken.
Die logischen Operatoren heißen and, or und not. Komplexe Ausdrücke setzt du in einfache Anführungszeichen, damit die Shell Sonderzeichen wie Klammern nicht selbst interpretiert.
sudo tcpdump -i eth0 -nn 'tcp and (port 80 or port 443)'
sudo tcpdump -i eth0 -nn 'host 192.0.2.10 and not port 22'
| Filterbaustein | Bedeutung | Beispiel |
|---|---|---|
host | Quell- oder Zielhost | host 192.0.2.10 |
src host | Host als Quelle | src host 192.0.2.10 |
dst host | Host als Ziel | dst host 192.0.2.10 |
tcp | TCP-Pakete | tcp |
udp | UDP-Pakete | udp |
icmp | ICMP-Pakete | icmp |
arp | ARP-Pakete auf Layer 2 | arp |
port | Quell- oder Zielport | port 443 |
src port | Port der Quelle | src port 22 |
dst port | Port des Ziels | dst port 53 |
portrange | Portbereich | portrange 8000-8100 |
and | Alle Bedingungen müssen stimmen | tcp and port 443 |
or | Mindestens eine Bedingung stimmt | port 80 or port 443 |
not | Bedingung ausschließen | not arp |
Nach IP-Adresse, Host und Protokoll filtern
host erfasst Verkehr zu oder von einem Host. Mit src host und dst host lässt sich die Richtung festlegen:
sudo tcpdump -i eth0 -nn host 192.168.198.2
sudo tcpdump -i eth0 -nn src host 192.168.198.2
sudo tcpdump -i eth0 -nn dst host 192.168.198.2
sudo tcpdump -i eth0 -nn 'host 2001:db8::10 and tcp'
IP-Adressen sind für reproduzierbare Diagnosebefehle meist besser als Hostnamen. Bei Hostnamen kann tcpdump vor dem Mitschnitt eine Namensauflösung durchführen. Diese Auflösung kann fehlschlagen, die Ausgabe verlangsamen oder durch wechselnde DNS-Ergebnisse schwer vergleichbar machen.
sudo tcpdump -i eth0 -nn tcp
sudo tcpdump -i eth0 -nn udp
sudo tcpdump -i eth0 -nn icmp
sudo tcpdump -i eth0 -nn arp
TCP, UDP und ICMP sind IP-basierte Filter. ARP gehört zur lokalen Netzwerkebene und wird nicht durch einen reinen IP-Filter wie tcp erfasst. Für DNS ist udp port 53 ein guter Start, bei Bedarf ergänzt du tcp port 53.
Nach Port und Dienst filtern
sudo tcpdump -i eth0 -nn port 443
sudo tcpdump -i eth0 -nn 'tcp port 22'
sudo tcpdump -i eth0 -nn 'udp port 53'
sudo tcpdump -i eth0 -nn 'tcp and dst port 443'
sudo tcpdump -i eth0 -nn portrange 8000-8100
port 443 passt für Quell- oder Zielport 443. src port und dst port machen die Richtung ausdrücklich. Durch die Kombination mit einem Protokoll vermeidest du unerwünschte Treffer, beispielsweise mit tcp and port 443 für TCP-Verkehr zu HTTPS-Diensten.
Ein gezielter Filter für den Transportverkehr eines bestimmten Servers sieht so aus:
sudo tcpdump -i eth0 -nn 'tcp and host 192.168.198.2 and port 443'
Pakete in pcap-Dateien speichern
Mit -w schreibt tcpdump einen binären Mitschnitt im pcap-Format. Diese Datei ist nicht als normale Terminalausgabe gedacht, sondern wird mit tcpdump, Wireshark oder anderen Analysewerkzeugen gelesen.
sudo tcpdump -i eth0 -c 100 -w capture.pcap
sudo tcpdump -i eth0 -nn -s 0 -w /geschuetzter/pfad/diagnose.pcap 'host 192.0.2.10 and port 443'
Plane Speicherplatz, Dateirechte und den Speicherort. -c 100 beendet die Aufnahme nach 100 Paketen. -s begrenzt die Zahl der pro Paket gespeicherten Bytes; ein kleinerer Wert spart Platz, kann aber für die Analyse wichtige Nutzdaten abschneiden. Mit -s 0 wird die vollständige Paketgröße angefordert. Für lange Aufnahmen sind zeit- oder größenbasierte Rotationsoptionen wie -C, -G und -W je nach tcpdump-Version geeignet. Kontrolliere dabei, dass alte Dateien nicht ungewollt sensible Daten behalten.
Capture-Dateien wieder einlesen
tcpdump -nn -r capture.pcap
tcpdump -tttt -nn -r capture.pcap 'tcp port 22'
tcpdump -A -s 0 -r capture.pcap 'tcp port 80'
Beim Offline-Lesen verwendest du dieselben Anzeigeoptionen und BPF-Filter wie bei einer Live-Aufnahme. tcpdump eignet sich besonders für eine schnelle Prüfung auf der Kommandozeile. Für die tiefere, interaktive Auswertung von Streams, Protokollfeldern und Zeitabläufen kann die pcap-Datei in Wireshark geöffnet werden. Gib die Datei nur an berechtigte Personen weiter.
Praxisworkflow zur Fehlersuche
- Definiere das Problem: Welcher Client, welcher Server, welche IP-Adresse, welcher Port und welcher Zeitraum sind beteiligt?
- Ermittle das Interface, auf dem der Verkehr tatsächlich sichtbar sein sollte.
- Formuliere einen möglichst engen Filter, etwa nach Host, Protokoll und Port.
- Starte tcpdump vor der problematischen Aktion und reproduziere den Fehler.
- Prüfe Handshake, Anfrage, Antwort, Zurückweisungen, Timeouts und Wiederholungen.
- Speichere bei Bedarf einen begrenzten pcap-Mitschnitt und analysiere ihn offline.
sudo tcpdump -i eth0 -tttt -nn -c 200 -w ssh-problem.pcap 'tcp and host 192.0.2.10 and port 22'
| Beobachtung | Mögliche Bedeutung | Nächster Prüfschritt |
|---|---|---|
| SYN ohne Antwort | Routing-, Firewall- oder Erreichbarkeitsproblem; Antwort ist am Beobachtungspunkt nicht sichtbar | Client- und Serverseite vergleichen, Routing und Firewall prüfen |
| RST | Kein Dienst lauscht oder eine Komponente setzt die Verbindung zurück | Listening-Ports, Dienststatus und Firewall prüfen |
| DNS-Anfrage ohne Antwort | DNS-Server, Netzwerkweg oder Port 53 ist gestört | UDP- und TCP-Port 53 sowie mögliche ICMP-Fehler prüfen |
| Wiederholte Pakete | Bestätigungen fehlen oder Pakete gehen verloren | Verlust, Überlastung, MTU und Gegenstelle untersuchen |
| ICMP-Unreachable | Ein Netzwerkgerät meldet, dass Ziel oder Dienst nicht erreichbar ist | Route, Zieladresse und Filterregeln prüfen |
| TCP-Handshake vollständig, Anwendung antwortet nicht | Transportweg funktioniert, Problem liegt möglicherweise in Dienst, Protokoll oder Anwendung | Nutzdaten, Serverlogs und Anwendungs-Timeouts untersuchen |
Typische Diagnosebeispiele
Lokalen Webdienst prüfen
sudo tcpdump -i lo -nn tcp port 80
Rufe anschließend den lokalen Dienst auf. Sichtbare SYN-, ACK- und Datenpakete zeigen, ob die lokale TCP-Kommunikation stattfindet.
SSH-Verbindung eingrenzen
sudo tcpdump -i eth0 -nn 'tcp port 22'
Ein SYN ohne Antwort weist auf ein Problem zwischen Beobachtungspunkt und Ziel hin. Ein sofortiges RST kann bedeuten, dass auf Port 22 kein Dienst lauscht oder eine Zwischenkomponente die Verbindung zurücksetzt.
DNS-Anfragen untersuchen
sudo tcpdump -i eth0 -nn 'udp port 53 or tcp port 53'
Prüfe, ob auf jede Anfrage eine Antwort vom erwarteten DNS-Server folgt. Achte außerdem auf falsche Quell- oder Zieladressen und ICMP-Fehler.
Nicht verschlüsselte HTTP-Nutzdaten ansehen
sudo tcpdump -i eth0 -A -s 0 'tcp port 80'
In einer autorisierten Testumgebung können HTTP-Anfragen und -Antworten teilweise als ASCII erscheinen. Bei HTTPS siehst du in der Regel TCP- und TLS-Transportinformationen, aber keine entschlüsselten HTTP-Inhalte.
Grenzen und sichere Nutzung
tcpdump sieht nur Pakete, die am gewählten Beobachtungspunkt und auf dem gewählten Interface sichtbar sind. Bei einem geswitchten Netzwerk erhält ein Rechner normalerweise nicht automatisch den gesamten Verkehr anderer Ports. Sichtbarkeit hängt unter anderem von Switch-Konfiguration, Netzwerktyp, VLANs, Bridges, Containern und dem verwendeten Interface ab. Der Promiscuous Mode kann die Sichtbarkeit auf einem lokalen Segment beeinflussen, macht aber nicht automatisch den gesamten Verkehr eines Netzwerks sichtbar.
Bei hoher Last können Pakete verloren gehen. Präzise BPF-Filter, eine begrenzte Snaplen, eine feste Paketanzahl oder Dateirotation helfen, die Belastung und Dateigröße zu kontrollieren. Prüfe nach jeder Aufnahme die Drop-Statistik.
Wenn keine Pakete erscheinen, kontrolliere zuerst das Interface mit sudo tcpdump -D. Teste anschließend kurz ohne einen engen Filter und wiederhole die problematische Aktion. Denke auch an lo, VLAN-, Bond-, Bridge- oder Container-Interfaces. Bei Berechtigungsfehlern prüfst du autorisierte administrative Rechte und die lokalen Linux-Capabilities. Bei Host- oder Dienstnamen in der Ausgabe verwendest du -nn.
Für weiterführende Netzwerkdiagnosen können ip, ss, ping, traceroute, dig, tshark und Wireshark ergänzend eingesetzt werden. tcpdump bleibt besonders nützlich, wenn du auf einem Server schnell, reproduzierbar und ohne grafische Oberfläche einen gezielten Paketmitschnitt erstellen möchtest.
Weiterführender Einstieg: tcpdump-Befehl unter Linux.