# tcpdump — Netzwerkverkehr auf der Kommandozeile analysieren

> Praxis-Guide zu tcpdump — dem klassischen CLI-Paketanalyzer: Netzwerkverkehr aufzeichnen, BPF-Filter einsetzen und Protokolle debuggen.

Source: https://www.jpkc.com/db/cheatsheets/networking/tcpdump/

<!-- PROSE:intro -->
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.
<!-- PROSE:intro:end -->

## Pakete aufzeichnen

`tcpdump` — Zeichnet alle Pakete auf dem Standard-Interface auf. Benötigt Root-Rechte.

```bash
sudo tcpdump
```

`tcpdump -i INTERFACE` — Zeichnet auf einem bestimmten Interface auf.

```bash
sudo tcpdump -i eth0
```

`tcpdump -i any` — Zeichnet auf allen Interfaces gleichzeitig auf.

```bash
sudo tcpdump -i any
```

`tcpdump -c COUNT` — Zeichnet eine bestimmte Anzahl von Paketen auf und beendet sich dann.

```bash
sudo tcpdump -c 100
```

`tcpdump -D` — Listet alle verfügbaren Netzwerk-Interfaces auf.

```bash
tcpdump -D
```

## Ausgabe-Optionen

`tcpdump -n` — Numerische Ausgabe – Hostnamen nicht auflösen.

```bash
sudo tcpdump -n
```

`tcpdump -nn` — Hostnamen und Portnamen nicht auflösen.

```bash
sudo tcpdump -nn
```

`tcpdump -v` — Ausführliche Ausgabe – zeigt TTL, Kennung, Gesamtlänge, IP-Optionen.

```bash
sudo tcpdump -v
```

`tcpdump -vv` — Noch ausführlicher – zusätzliche Details auf Protokollebene.

```bash
sudo tcpdump -vv
```

`tcpdump -vvv` — Maximale Ausführlichkeit.

```bash
sudo tcpdump -vvv
```

`tcpdump -q` — Kompakte Ausgabe – weniger Protokollinformationen pro Zeile.

```bash
sudo tcpdump -q
```

`tcpdump -e` — Zeigt Link-Layer-Header (Ethernet) mit MAC-Adressen.

```bash
sudo tcpdump -e
```

`tcpdump -t` — Zeitstempel nicht ausgeben.

```bash
sudo tcpdump -t
```

`tcpdump -tt` — UNIX-Epoch-Zeitstempel ausgeben.

```bash
sudo tcpdump -tt
```

`tcpdump -ttt` — Zeit-Delta zwischen Paketen ausgeben.

```bash
sudo tcpdump -ttt
```

`tcpdump -tttt` — Datum und Uhrzeit in lesbarem Format ausgeben.

```bash
sudo tcpdump -tttt
```

## Paketinhalt anzeigen

`tcpdump -X` — Paketdaten in Hex und ASCII ausgeben.

```bash
sudo tcpdump -X -c 5
```

`tcpdump -XX` — Paketdaten in Hex und ASCII inklusive Link-Layer-Header ausgeben.

```bash
sudo tcpdump -XX -c 5
```

`tcpdump -A` — Paketdaten nur in ASCII ausgeben. Praktisch zum Lesen von HTTP-Verkehr.

```bash
sudo tcpdump -A port 80
```

`tcpdump -s SIZE` — Snapshot-Länge in Bytes festlegen (Standard: 262144). 0 für vollständige Pakete.

```bash
sudo tcpdump -s 0
```

`tcpdump -s 96` — Nur Header aufzeichnen (96 Bytes). Spart Speicherplatz bei großen Mitschnitten.

```bash
sudo tcpdump -s 96
```

## Datei-Operationen

`tcpdump -w FILE` — Aufgezeichnete Pakete in eine pcap-Datei schreiben.

```bash
sudo tcpdump -w capture.pcap
```

`tcpdump -r FILE` — Pakete aus einer pcap-Datei lesen und anzeigen.

```bash
tcpdump -r capture.pcap
```

`tcpdump -r FILE -nn` — pcap-Datei mit numerischer Ausgabe lesen.

```bash
tcpdump -r capture.pcap -nn
```

`tcpdump -w FILE -C SIZE_MB` — Aufzeichnungsdatei nach SIZE Megabyte rotieren.

```bash
sudo tcpdump -w capture.pcap -C 100
```

`tcpdump -w FILE -W COUNT -C SIZE_MB` — Durch COUNT Dateien rotieren, jede bis zu SIZE MB (Ringpuffer).

```bash
sudo tcpdump -w capture.pcap -W 5 -C 100
```

`tcpdump -w FILE -G SECONDS` — Aufzeichnungsdatei alle SECONDS Sekunden rotieren. strftime-Format im Dateinamen verwenden.

```bash
sudo tcpdump -w capture_%Y%m%d_%H%M%S.pcap -G 3600
```

## BPF-Filter — Host & Netzwerk

`tcpdump host HOST` — Verkehr zu oder von einem bestimmten Host aufzeichnen.

```bash
sudo tcpdump host 192.168.1.1
```

`tcpdump src host HOST` — Verkehr von einem bestimmten Absender aufzeichnen.

```bash
sudo tcpdump src host 192.168.1.100
```

`tcpdump dst host HOST` — Verkehr zu einem bestimmten Ziel aufzeichnen.

```bash
sudo tcpdump dst host 8.8.8.8
```

`tcpdump net NETWORK/CIDR` — Verkehr zu oder von einem Netzwerk aufzeichnen.

```bash
sudo tcpdump net 192.168.1.0/24
```

`tcpdump src net NETWORK/CIDR` — Verkehr aus einem Netzwerk aufzeichnen.

```bash
sudo tcpdump src net 10.0.0.0/8
```

## BPF-Filter — Port & Protokoll

`tcpdump port PORT` — Verkehr auf einem bestimmten Port aufzeichnen (TCP und UDP).

```bash
sudo tcpdump port 80
```

`tcpdump src port PORT` — Verkehr von einem bestimmten Quell-Port aufzeichnen.

```bash
sudo tcpdump src port 443
```

`tcpdump dst port PORT` — Verkehr zu einem bestimmten Ziel-Port aufzeichnen.

```bash
sudo tcpdump dst port 22
```

`tcpdump portrange START-END` — Verkehr auf einem Port-Bereich aufzeichnen.

```bash
sudo tcpdump portrange 8000-9000
```

`tcpdump tcp` — Nur TCP-Verkehr aufzeichnen.

```bash
sudo tcpdump tcp
```

`tcpdump udp` — Nur UDP-Verkehr aufzeichnen.

```bash
sudo tcpdump udp
```

`tcpdump icmp` — Nur ICMP-Verkehr aufzeichnen.

```bash
sudo tcpdump icmp
```

`tcpdump arp` — Nur ARP-Verkehr aufzeichnen.

```bash
sudo tcpdump arp
```

`tcpdump ip6` — Nur IPv6-Verkehr aufzeichnen.

```bash
sudo tcpdump ip6
```

## BPF-Filter — Verknüpfen

`tcpdump host HOST and port PORT` — Filter mit AND verknüpfen.

```bash
sudo tcpdump host 192.168.1.1 and port 80
```

`tcpdump port 80 or port 443` — Filter mit OR verknüpfen.

```bash
sudo tcpdump port 80 or port 443
```

`tcpdump not port PORT` — Bestimmten Verkehr mit NOT ausschließen.

```bash
sudo tcpdump not port 22
```

`tcpdump 'host HOST and (port 80 or port 443)'` — Klammern zur Gruppierung verwenden (Ausdruck in Anführungszeichen setzen).

```bash
sudo tcpdump 'host 192.168.1.1 and (port 80 or port 443)'
```

`tcpdump 'not (port 22 or port 53)'` — Mehrere Ports ausschließen.

```bash
sudo tcpdump 'not (port 22 or port 53)'
```

## Erweiterte Filter

`tcpdump 'tcp[tcpflags] & (tcp-syn) != 0'` — Nur TCP-SYN-Pakete aufzeichnen (neue Verbindungen).

```bash
sudo tcpdump 'tcp[tcpflags] & (tcp-syn) != 0'
```

`tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'` — Nur initiale SYN-Pakete aufzeichnen (SYN ohne ACK).

```bash
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.

```bash
sudo tcpdump 'tcp[tcpflags] & (tcp-rst) != 0'
```

`tcpdump 'tcp[tcpflags] & (tcp-fin) != 0'` — TCP-FIN-Pakete aufzeichnen (Verbindungsabbau).

```bash
sudo tcpdump 'tcp[tcpflags] & (tcp-fin) != 0'
```

`tcpdump greater SIZE` — Nur Pakete größer als SIZE Bytes aufzeichnen.

```bash
sudo tcpdump greater 500
```

`tcpdump less SIZE` — Nur Pakete kleiner als SIZE Bytes aufzeichnen.

```bash
sudo tcpdump less 100
```

`tcpdump ether host MAC` — Verkehr zu/von einer bestimmten MAC-Adresse aufzeichnen.

```bash
sudo tcpdump ether host aa:bb:cc:dd:ee:ff
```

`tcpdump vlan VLANID` — Verkehr auf einem bestimmten VLAN aufzeichnen.

```bash
sudo tcpdump vlan 100
```

## Typische Aufzeichnungs-Muster

`tcpdump -i eth0 -nn -c 100 -w capture.pcap` — Schneller Mitschnitt: 100 Pakete, numerisch, in Datei gespeichert.

```bash
sudo tcpdump -i eth0 -nn -c 100 -w capture.pcap
```

`tcpdump -i any -nn port 80 -A` — HTTP-Verkehr in ASCII auf allen Interfaces beobachten.

```bash
sudo tcpdump -i any -nn port 80 -A
```

`tcpdump -i any -nn port 53` — DNS-Anfragen und -Antworten überwachen.

```bash
sudo tcpdump -i any -nn port 53
```

`tcpdump -i eth0 -nn icmp` — ICMP-Verkehr überwachen (Ping, Traceroute, Unreachable).

```bash
sudo tcpdump -i eth0 -nn icmp
```

`tcpdump -i any -nn 'tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn'` — Alle neuen eingehenden TCP-Verbindungen beobachten.

```bash
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.

```bash
sudo tcpdump -i any -nn host 192.168.1.1 and not port 22
```

`tcpdump -r capture.pcap -nn 'tcp[tcpflags] & (tcp-rst) != 0'` — RST-Pakete in einer aufgezeichneten Datei suchen.

```bash
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.

```bash
sudo tcpdump -i eth0 -tttt -nn -s0 -w long_capture.pcap &
```

<!-- PROSE:outro -->
## 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](https://www.tcpdump.org/) – Downloads und Dokumentation (englisch)
- [tcpdump(1) – Manpage](https://www.tcpdump.org/manpages/tcpdump.1.html) – alle Optionen und BPF-Filter-Referenz (englisch)
- [tcpdump – Wikipedia](https://en.wikipedia.org/wiki/Tcpdump) – Hintergrund und Geschichte (englisch)
<!-- PROSE:outro:end -->

## Verwandte Kommandos

- [nmap](https://www.jpkc.com/db/cheatsheets/networking/nmap/) – Netzwerke und offene Ports scannen
- [iftop](https://www.jpkc.com/db/cheatsheets/networking/iftop/) – Bandbreitenverbrauch pro Host in Echtzeit anzeigen
- [socat](https://www.jpkc.com/db/cheatsheets/networking/socat/) – bidirektionale Datenströme verbinden und debuggen

