tcpdump:捕获几个vlan中的一个

我想要tcpdump捕获VLAN 1000或VLAN 501. man pcap-filter说:

vlan [vlan_id]expression式可以多次使用,以过滤VLAN层次结构。 每次使用该expression式都会将filter偏移量增加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上的stream量?

    我记得你可以直接检查数据包字节。 所以直接看以太网头的作品:

     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"