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