tcpdump: captura uma das várias vlans

10

Eu quero que o tcpdump capture VLAN 1000 ou VLAN 501. man pcap-filter diz:

The vlan [vlan_id] expression may be used more than once, to filter on VLAN hierarchies. Each use of that expression increments the filter offsets by 4.

Quando 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 por causa do comportamento "incrementar por 4" descrito na página man.

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

    
por bstpierre 29.10.2010 / 18:31

3 respostas

14

Eu lembrei que você pode examinar os bytes do pacote diretamente. Então, olhando diretamente para o cabeçalho da 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 do :2 , este é um campo de 2 bytes - fiquei preso nisso por um tempo.

    
por 29.10.2010 / 18:51
6

Isso pode ser feito de maneira mais simples do que usando exame profundo de pacotes, apenas use grep:

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

-e: Imprima 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ê quiser pegar mais de um ID de VLAN, pode usar o comando like:

tcpdump -n -i eth1 -e | grep "vlan 1000\|vlan 501"
    
por 12.01.2017 / 21:04
-1

Parece que o filtro vlan muda o conteúdo do pacote ....

link

    
por 06.04.2016 / 12:36