tcpdump: capture uma das várias vlans

11

Eu quero que o tcpdump capture a VLAN 1000 ou a VLAN 501. man pcap-filterdiz:

A expressão vlan [vlan_id] pode ser usada mais de uma vez, para filtrar nas hierarquias da VLAN. Cada uso dessa expressão incrementa as compensações de filtro em 4.

Quando eu faço:

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

Eu recebo pacotes capturados.

Mas quando eu faço:

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

Eu não recebo nenhum pacote - presumo que o comportamento "incremento de 4" descrito na página de manual.

Como capturar tráfego em mais de uma VLAN por vez?

bstpierre
fonte

Respostas:

15

Lembrei que você pode examinar diretamente os bytes do pacote. Então, olhar diretamente para o cabeçalho ethernet funciona:

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ão se esqueça :2, este é um campo de 2 bytes - fiquei preso por um tempo.

bstpierre
fonte
6

Isso pode ser feito de maneira mais simples do que o exame de pacotes profundos, basta usar grep:

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

-e: imprime o cabeçalho no nível do link em cada linha de despejo.

imprimirá linhas como

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

que pode ser facilmente capturado pelo grep

Se você deseja capturar mais de um ID de VLAN, pode usar o comando como:

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