tcpdump ist das Standard-Werkzeug für Netzwerkanalyse unter Linux. Es ermöglicht das Mitschneiden und Analysieren von Netzwerkpaketen direkt auf der Kommandozeile.
Installation
Debian/Ubuntu
apt install tcpdumpCentOS/RHEL
dnf install tcpdumpVersion prüfen
tcpdump --versionGrundlegende Verwendung
Alle Pakete anzeigen
# Root-Rechte erforderlich
tcpdump
# Auf bestimmtem Interface
tcpdump -i eth0
# Alle Interfaces
tcpdump -i anyVerfügbare Interfaces
tcpdump -DAusgabe formatieren
# Verbose
tcpdump -v
tcpdump -vv
tcpdump -vvv
# Keine DNS-Auflösung (schneller)
tcpdump -n
# Keine Port-Auflösung
tcpdump -nn
# Zeitstempel
tcpdump -tttt # Lesbar
tcpdump -ttt # Delta seit letztem PaketFilter-Syntax
Nach Host
# Alle Pakete von/zu einem Host
tcpdump host 192.168.1.100
# Nur Quell-Adresse
tcpdump src host 192.168.1.100
# Nur Ziel-Adresse
tcpdump dst host 192.168.1.100
# Nach Hostname
tcpdump host example.comNach Netzwerk
# Ganzes Subnetz
tcpdump net 192.168.1.0/24
# Quell-Netzwerk
tcpdump src net 10.0.0.0/8Nach Port
# Bestimmter Port
tcpdump port 80
tcpdump port 443
# Port-Bereich
tcpdump portrange 8000-9000
# Quell-Port
tcpdump src port 22
# Ziel-Port
tcpdump dst port 3306Nach Protokoll
# TCP
tcpdump tcp
# UDP
tcpdump udp
# ICMP (Ping)
tcpdump icmp
# ARP
tcpdump arp
# IPv6
tcpdump ip6Kombinierte Filter
# AND (&&)
tcpdump host 192.168.1.100 and port 80
# OR (||)
tcpdump port 80 or port 443
# NOT (!)
tcpdump not port 22
# Komplexe Filter
tcpdump 'host 192.168.1.100 and (port 80 or port 443)'
tcpdump 'src host 192.168.1.100 and dst port 3306'
tcpdump 'tcp and not port 22'Praktische Beispiele
HTTP-Traffic
tcpdump -i eth0 -nn port 80HTTPS-Traffic
tcpdump -i eth0 -nn port 443DNS-Anfragen
tcpdump -i eth0 -nn port 53SSH-Traffic
tcpdump -i eth0 -nn port 22MySQL-Verbindungen
tcpdump -i eth0 -nn port 3306SMTP/Mail
tcpdump -i eth0 -nn 'port 25 or port 465 or port 587'Ping (ICMP)
tcpdump -i eth0 icmpNur SYN-Pakete (neue Verbindungen)
tcpdump 'tcp[tcpflags] & (tcp-syn) != 0'Nur Verbindungsaufbau
tcpdump 'tcp[tcpflags] == tcp-syn'RST-Pakete (Verbindungsabbrüche)
tcpdump 'tcp[tcpflags] & (tcp-rst) != 0'In Datei speichern
Capture speichern
# In PCAP-Datei speichern
tcpdump -i eth0 -w capture.pcap
# Mit Filter
tcpdump -i eth0 -w http.pcap port 80
# Mit Zeitlimit (60 Sekunden)
timeout 60 tcpdump -i eth0 -w capture.pcap
# Mit Paketlimit
tcpdump -i eth0 -c 1000 -w capture.pcapCapture lesen
# Datei lesen
tcpdump -r capture.pcap
# Mit Filtern
tcpdump -r capture.pcap host 192.168.1.100
tcpdump -r capture.pcap -nn port 80Rotierende Dateien
# 10 Dateien à 100 MB
tcpdump -i eth0 -w capture.pcap -W 10 -C 100
# Ergebnis: capture.pcap0, capture.pcap1, ...Paket-Inhalt anzeigen
ASCII-Ausgabe
tcpdump -i eth0 -A port 80Hex + ASCII
tcpdump -i eth0 -X port 80Hex-Ausgabe
tcpdump -i eth0 -xx port 80Snapshot-Länge
# Erste 100 Bytes pro Paket
tcpdump -i eth0 -s 100 port 80
# Komplette Pakete
tcpdump -i eth0 -s 0 port 80Erweiterte Filter
TCP-Flags
# SYN
tcpdump 'tcp[tcpflags] & tcp-syn != 0'
# ACK
tcpdump 'tcp[tcpflags] & tcp-ack != 0'
# FIN
tcpdump 'tcp[tcpflags] & tcp-fin != 0'
# RST
tcpdump 'tcp[tcpflags] & tcp-rst != 0'
# PUSH
tcpdump 'tcp[tcpflags] & tcp-push != 0'
# Nur SYN (kein ACK) - neue Verbindungen
tcpdump 'tcp[tcpflags] == tcp-syn'
# SYN-ACK
tcpdump 'tcp[tcpflags] == (tcp-syn|tcp-ack)'Paketgröße
# Pakete größer als 500 Bytes
tcpdump 'greater 500'
# Pakete kleiner als 100 Bytes
tcpdump 'less 100'HTTP-Requests
# GET-Requests
tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' | grep -i "GET"
# Einfacher: HTTP-Header
tcpdump -i eth0 -A port 80 | grep -E "^(GET|POST|PUT|DELETE|Host:)"VLAN-Traffic
tcpdump -i eth0 vlan 100Analyse-Szenarien
Netzwerkprobleme diagnostizieren
# Retransmissions finden
tcpdump -i eth0 'tcp[tcpflags] & (tcp-rst) != 0'
# Fragmentierte Pakete
tcpdump -i eth0 '((ip[6:2] > 0) and (ip[6:2] & 0x1fff) != 0)'
# ICMP-Fehler
tcpdump -i eth0 icmp and 'icmp[0] != 8 and icmp[0] != 0'Langsame Verbindungen
# Verbindungsaufbau überwachen
tcpdump -i eth0 'tcp[tcpflags] == tcp-syn' -tttARP-Probleme
tcpdump -i eth0 arpBroadcast-Traffic
tcpdump -i eth0 broadcast
tcpdump -i eth0 ether broadcastMulticast-Traffic
tcpdump -i eth0 multicastPerformance-Tipps
Schnellere Ausgabe
# Keine Namensauflösung
tcpdump -nn
# Keine Prüfsummen-Verifizierung
tcpdump --dont-verify-checksumsBuffer-Größe
# Größerer Buffer für hohen Traffic
tcpdump -B 4096Kernel-Filter
# BPF-Filter im Kernel (Standard)
tcpdump -i eth0 'tcp port 80'
# Filter-Statistik anzeigen
tcpdump -i eth0 -v port 80 2>&1 | head -20Mit Wireshark kombinieren
Capture für Wireshark
# Capture erstellen
tcpdump -i eth0 -w /tmp/capture.pcap -c 10000 port 80
# Auf lokalen Rechner kopieren
scp server:/tmp/capture.pcap .
# In Wireshark öffnen
wireshark capture.pcapLive-Streaming zu Wireshark
# Auf Server
tcpdump -i eth0 -w - -U | ssh user@local "wireshark -k -i -"
# Alternativ: Named Pipe
mkfifo /tmp/capture
tcpdump -i eth0 -w - | tee /tmp/capture
# In Wireshark: /tmp/capture öffnenSicherheit und Best Practices
Zugriffsrechte
# tcpdump ohne Root (capability setzen)
setcap cap_net_raw,cap_net_admin=eip /usr/sbin/tcpdump
# Für bestimmten Benutzer
usermod -aG tcpdump usernameSensible Daten
# Passwörter in HTTP-Traffic
tcpdump -i eth0 -A port 80 2>/dev/null | grep -i "password\|passwd\|pass="
# Warnung: Nur für eigene Systeme!Speicherplatz überwachen
# Maximale Dateigröße
tcpdump -i eth0 -w capture.pcap -C 100 # 100 MB pro Datei
# Mit Rotation
tcpdump -i eth0 -w capture.pcap -C 100 -W 5 # 5 DateienNützliche Einzeiler
# Top 10 verbindungsfreudigste IPs
tcpdump -nn -c 1000 | awk '{print $3}' | cut -d. -f1-4 | sort | uniq -c | sort -rn | head -10
# Bandbreitennutzung beobachten
tcpdump -i eth0 -w - | pv > /dev/null
# HTTP-Hosts auflisten
tcpdump -i eth0 -nn -A port 80 | grep "Host:"
# DNS-Anfragen auflisten
tcpdump -i eth0 -nn port 53 | grep -oE '[a-zA-Z0-9.-]+\.[a-zA-Z]+'Troubleshooting
Keine Pakete angezeigt
# Interface prüfen
ip link show
tcpdump -D
# Promiscuous Mode
tcpdump -i eth0 --immediate-modePermission denied
# Als Root ausführen
sudo tcpdump -i eth0
# Oder Capabilities setzen
sudo setcap cap_net_raw=ep /usr/sbin/tcpdumpZu viele Pakete
# Mit Filter einschränken
tcpdump -i eth0 'not port 22 and not port 53'
# Limit setzen
tcpdump -i eth0 -c 100Zusammenfassung
| Option | Funktion | |--------|----------| | -i eth0 | Interface wählen | | -nn | Keine Namensauflösung | | -v/-vv/-vvv | Verbose | | -w file | In Datei schreiben | | -r file | Aus Datei lesen | | -c 100 | Nur 100 Pakete | | -A | ASCII-Ausgabe | | -X | Hex + ASCII |
| Filter | Beschreibung | |--------|--------------| | host IP | Nach Host | | port 80 | Nach Port | | tcp/udp/icmp | Nach Protokoll | | src/dst | Quelle/Ziel | | and/or/not | Logische Operatoren |
Fazit
tcpdump ist unverzichtbar für Netzwerkanalyse und Troubleshooting. Die BPF-Filtersyntax ermöglicht präzise Paketauswahl. Für komplexe Analysen exportieren Sie Captures im PCAP-Format für Wireshark. Beachten Sie Datenschutz und rechtliche Aspekte beim Mitschneiden von Netzwerkverkehr.