tcpdump: przechwyć jeden z kilku vlanów

11

Chcę, aby tcpdump przechwycił VLAN 1000 lub VLAN 501. man pcap-filtermówi:

Wyrażenie vlan [vlan_id] może być użyte więcej niż jeden raz, do filtrowania hierarchii VLAN. Każde użycie tego wyrażenia zwiększa przesunięcie filtra o 4.

Kiedy robię:

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

Dostaję przechwycone pakiety.

Ale kiedy robię:

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

Nie dostaję żadnych pakietów - zakładam z powodu zachowania „przyrost o 4” opisanego na stronie podręcznika.

Jak mogę przechwytywać ruch na więcej niż jednej sieci VLAN jednocześnie?

bstpierre
źródło

Odpowiedzi:

15

Przypomniałem sobie, że możesz bezpośrednio sprawdzić bajty pakietu. Działa więc bezpośrednie wyszukiwanie do nagłówka Ethernet:

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

Nie zapominaj :2, że jest to pole 2-bajtowe - utknąłem na chwilę.

bstpierre
źródło
6

Można to zrobić w prostszy sposób niż przy użyciu głębokiego badania pakietów, wystarczy użyć grep:

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

-e: wydrukuj nagłówek na poziomie łącza w każdej linii zrzutu.

wypisze linie takie jak

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

które można łatwo złapać grep

Jeśli chcesz złapać więcej niż jeden identyfikator VLAN, możesz użyć polecenia takiego jak:

tcpdump -n -i eth1 -e | grep "vlan 1000\|vlan 501"
SchwarzW01f
źródło