Назад | Перейти на главную страницу

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

Я хочу, чтобы 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 за раз?

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

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

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

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

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

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

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

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

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

Вроде фильтр vlan сдвигает содержимое пакета ....

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