tcpdump: captura uno de varios vlans

11

Quiero que tcpdump capture VLAN 1000 o VLAN 501. man pcap-filterdice:

La expresión vlan [vlan_id] se puede usar más de una vez, para filtrar en las jerarquías de VLAN. Cada uso de esa expresión incrementa las compensaciones del filtro en 4.

Cuando lo hago:

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

Recibo paquetes capturados.

Pero cuando lo hago:

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

No recibo ningún paquete. Supongo que debido al comportamiento de "incremento en 4" descrito en la página del manual.

¿Cómo puedo capturar el tráfico en más de una VLAN a la vez?

bstpierre
fuente

Respuestas:

15

Recordé que puedes examinar los bytes del paquete directamente. Entonces, mirar directamente en el encabezado de 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 )'

No olvides que :2este es un campo de 2 bytes: me quedé atrapado en esto por un tiempo.

bstpierre
fuente
6

Se puede hacer de una manera más simple que usando un examen de paquete profundo, solo use grep:

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

-e: imprime el encabezado de nivel de enlace en cada línea de volcado.

imprimirá líneas como

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

que puede ser fácilmente atrapado por grep

Si desea capturar más de una ID de VLAN, puede usar comandos como:

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