tcpdump-Filter verstehen
tcpdump verwendet die Filtersyntax von libpcap, oft BPF-Syntax genannt (Berkeley Packet Filter). Dieselbe Syntax gilt für Mitschnittfilter in Wireshark, tshark und dumpcap. Ein Filter besteht aus einfachen Bausteinen, die du mit and, or und not verknüpfst.
Die Bausteine: Typ, Richtung, Protokoll
- Typ:
host(eine Adresse),net(ein Netz in CIDR-Schreibweise),portundportrange. - Richtung:
src(Absender) oderdst(Empfänger). Ohne Angabe passt beides. - Protokoll:
tcp,udp,icmp,ip,ip6,arp,etherund weitere.
tcp dst port 443 src net 10.0.0.0/8 ether host 00:11:22:33:44:55
Verknüpfen und Klammern
and und or sind in libpcap gleich stark und werden von links nach rechts ausgewertet. a or b and c bedeutet deshalb (a or b) and c. Setz Klammern, sobald du beides mischst. Im Generator entsteht jede Klammer aus einer Gruppe.
Den Filter immer in einfache Anführungszeichen setzen, sonst wertet die Shell Klammern und Sonderzeichen selbst aus:
sudo tcpdump -nn -i eth0 'host 10.0.0.5 and (port 80 or port 443)'
TCP-Flags filtern
Mit tcp[tcpflags] greifst du auf die Flags im TCP-Header zu. tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn liefert nur das erste Paket jedes Verbindungsaufbaus: SYN gesetzt, ACK nicht gesetzt. Diese Schreibweise funktioniert nur für IPv4, weil libpcap den TCP-Header bei IPv6 nicht über die Erweiterungs-Header hinweg findet.
Häufige Filter
| Zweck | Filter |
|---|---|
| Verkehr eines Hosts | host 192.168.1.10 |
| Verkehr zwischen zwei Hosts | host 10.0.0.5 and host 10.0.0.20 |
| Web ohne eigene SSH-Sitzung | (port 80 or port 443) and not port 22 |
| DNS | port 53 |
| DHCP | udp portrange 67-68 |
| Verbindungsaufbau | tcp[tcpflags] & (tcp-syn|tcp-ack) == tcp-syn |
| Verbindungsabbrüche | tcp[tcpflags] & tcp-rst != 0 |
| Ping | icmp[icmptype] == icmp-echo |
| Pakete in VLAN 100 | vlan 100 and host 10.1.1.1 |
| Große Pakete (MTU-Probleme) | greater 1400 |
Tipps aus der Praxis
-nnschaltet DNS- und Port-Auflösung ab. Die Ausgabe kommt sofort und erzeugt selbst keinen DNS-Verkehr.-i anyschneidet auf allen Schnittstellen gleichzeitig mit (Linux).- Bist du per SSH angemeldet, schließ deine eigene Sitzung mit
not port 22aus, sonst siehst du vor allem deine eigene Ausgabe. -w datei.pcapspeichert die Rohdaten. Die Datei öffnest du später in Wireshark oder mittcpdump -r.- Bei VLAN-Verkehr muss
vlanvor den übrigen Bedingungen stehen, weil es die Lage der folgenden Header verschiebt. - Für Langzeitmitschnitte rotierst du Dateien mit
-C(Größe) oder-G(Zeit) und begrenzt ihre Zahl mit-W.
FAQ
Wie speichere ich einen Mitschnitt für Wireshark?
Trag unter Optionen einen Dateinamen bei „In Datei schreiben (-w)“ ein, z. B. mitschnitt.pcap. tcpdump schreibt dann die Rohpakete in diese Datei, die du direkt in Wireshark öffnen kannst.
Warum meldet tcpdump „syntax error“?
Meist wertet die Shell Klammern oder Sonderzeichen aus, weil der Filter nicht in Anführungszeichen steht. Der Generator setzt den Filter deshalb immer in einfache Anführungszeichen. Andere Ursachen sind Tippfehler in Schlüsselwörtern oder fehlende Klammern.
Funktioniert der Filter auch in Wireshark?
Ja, als Mitschnittfilter (Capture Filter), denn Wireshark nutzt dafür ebenfalls libpcap. Anzeigefilter in Wireshark verwenden eine andere Syntax, etwa ip.addr == 10.0.0.5 statt host 10.0.0.5.
Warum findet mein Filter bei VLAN-Verkehr keine Pakete?
Bei Paketen mit VLAN-Tag verschiebt sich der IP-Header um 4 Byte. Setz die VLAN-Regel deshalb an den Anfang, z. B. vlan 100 and host 10.0.0.5. Auf manchen Linux-Systemen entfernt die Netzwerkkarte den Tag schon vorher, dann brauchst du kein vlan.
Werden meine Eingaben irgendwohin übertragen?
Nein. Der Generator läuft vollständig in deinem Browser. Der Teilen-Link speichert den Filter im Teil hinter dem #, und diesen Teil schickt der Browser nicht an den Server.