tcpdump: capturer l'un des vlans

11

Je veux que tcpdump capture le VLAN 1000 ou le VLAN 501. man pcap-filterdit:

L'expression vlan [vlan_id] peut être utilisée plusieurs fois pour filtrer sur les hiérarchies VLAN. Chaque utilisation de cette expression incrémente les décalages du filtre de 4.

Quand je fais:

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

Je reçois des paquets capturés.

Mais quand je fais:

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

Je ne reçois aucun paquet - je présume en raison du comportement "incrément de 4" décrit dans la page de manuel.

Comment puis-je capturer du trafic sur plusieurs VLAN à la fois?

bstpierre
la source

Réponses:

15

Je me suis souvenu que vous pouvez examiner directement les octets de paquets. Donc, regarder directement dans l'en-tête Ethernet fonctionne:

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 )'

N'oubliez pas le :2, c'est un champ de 2 octets - je suis resté coincé là-dessus pendant un moment.

bstpierre
la source
6

Cela peut être fait de manière plus simple que d'utiliser un examen approfondi des paquets, utilisez simplement grep:

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

-e: imprimer l'en-tête au niveau du lien sur chaque ligne de vidage.

il imprimera des lignes comme

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

qui peut être facilement attrapé par grep

Si vous voulez attraper plus d'un ID VLAN, vous pouvez utiliser une commande comme:

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