我想要 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 上的流量?
答案1
我记得你可以直接检查数据包字节。因此,直接查看以太网报头是可行的:
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 字节字段——我在这个问题上困惑了一段时间。
答案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"