tcpdump: захватить один из нескольких vlans

11

Я хочу, чтобы tcpdump перехватывал VLAN 1000 или VLAN 501. man pcap-filterговорит:

Выражение vlan [vlan_id] может использоваться более одного раза для фильтрации иерархий VLAN. Каждое использование этого выражения увеличивает смещение фильтра на 4.

Когда я делаю:

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

Я получаю захваченные пакеты.

Но когда я сделаю:

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

Я не получаю никаких пакетов - я полагаю, из-за поведения "приращения на 4", описанного на странице руководства.

Как я могу захватывать трафик более чем в одной VLAN одновременно?

bstpierre
источник

Ответы:

15

Я вспомнил, что вы можете проверить байты пакета напрямую. Так что, глядя прямо в заголовок 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 )'

Не забывайте :2, это 2-байтовое поле - я застрял на нем некоторое время.

bstpierre
источник
6

Это можно сделать более простым способом, чем использовать глубокий пакетный экзамен, просто используйте grep:

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

-e: напечатать заголовок уровня связи в каждой строке дампа.

он будет печатать строки как

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

которые можно легко поймать с помощью grep

Если вы хотите поймать более одного VLAN ID, вы можете использовать команду, например:

tcpdump -n -i eth1 -e | grep "vlan 1000\|vlan 501"
SchwarzW01f
источник
-1

Кажется, фильтр VLAN сдвигает содержимое пакета ....

http://www.christian-rossow.de/articles/tcpdump_filter_mixed_tagged_and_untagged_VLAN_traffic.php

Хавьер Торрес
источник
2
Пожалуйста, не публикуйте только ссылки. Они низкого качества, потому что ссылки могут измениться / устареть. Лучше всего включать необходимые детали прямо в свой пост и предоставлять ссылку только для справки.
Касталья