tcpdump: Erfassen Sie einen von mehreren VLANs

11

Ich möchte, dass tcpdump VLAN 1000 oder VLAN 501 erfasst. man pcap-filterSagt:

Der Ausdruck vlan [vlan_id] kann mehrmals verwendet werden, um nach VLAN-Hierarchien zu filtern. Jede Verwendung dieses Ausdrucks erhöht die Filterversätze um 4.

Wenn ich es tue:

tcpdump -vv -i eth1 \( vlan 1000 \) and \( ip host 10.1.1.98 or ip host 10.1.1.99 \)

Ich bekomme erbeutete Pakete.

Aber wenn ich das mache:

tcpdump -vv -i eth1 \( vlan 1000 or vlan 501 \) and \( ip host 10.1.1.98 or ip host 10.1.1.99 \)

Ich bekomme keine Pakete - ich nehme an, wegen des in der Manpage beschriebenen Verhaltens "Inkrementieren um 4".

Wie kann ich Datenverkehr in mehr als einem VLAN gleichzeitig erfassen?

bstpierre
quelle

Antworten:

15

Ich erinnerte mich, dass Sie die Paketbytes direkt untersuchen können. Ein direkter Blick in den Ethernet-Header funktioniert also:

tcpdump -vv -i eth1 '( vlan and ( ether[14:2] & 0xfff == 1000 or ether[14:2] & 0xfff == 501 ) ) and ( ip host 10.1.1.98 or ip host 10.1.1.99 )'

Vergiss das nicht, das :2ist ein 2-Byte-Feld - ich habe mich eine Weile damit beschäftigt.

bstpierre
quelle
6

Es kann einfacher gemacht werden als mit Deep Packet Exam. Verwenden Sie einfach grep:

tcpdump -n -i eth1 -e | grep "vlan 1000" 

-e: Gibt den Header auf Verbindungsebene in jeder Speicherauszugszeile aus.

es werden Zeilen wie gedruckt

ethertype 802.1Q (0x8100), length 60: vlan 1000, p 0, ethertype ARP

das kann leicht von grep gefangen werden

Wenn Sie mehr als eine VLAN-ID abfangen möchten, können Sie folgende Befehle verwenden:

tcpdump -n -i eth1 -e | grep "vlan 1000\|vlan 501"
SchwarzW01f
quelle