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