tcpdump:捕获多个VLAN之一


11

我希望tcpdump捕获VLAN 1000或VLAN501。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上的流量?

Answers:


15

我记得您可以直接检查数据包字节。因此,直接查看以太网头即可:

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字节的字段-我在这上停留了一段时间。


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"

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.