为什么Bpf允许ether [0:2]和ether [0:4]但不允许ether [0:3]?

时间:2019-04-15 10:40:28

标签: networking wireshark packet-sniffers bpf

为什么伯克利包过滤器允许对以供应商为单位的ether [0:2]和ether [0:4]进行过滤,但不允许以ether [0:3]进行过滤?tcpdump 'ether[0:3] = 0x000000'返回 tcpdump: data size must be 1, 2, or 4

1 个答案:

答案 0 :(得分:1)

pcap-filter手册页(搜索“字节偏移”)对此进行了确认,尽管它也未提供其他信息。

我的猜测是libpcap refuses创建一个一次比较三个字节的程序,因为它生成的经典BPF程序do not have instructions直接支持这种比较。它可以将一个字节,一个半字(两个字节)或一个字(四个字节)加载到一个寄存器中,并将其与一个值进行比较,但是它不能使用三字节长的值。

我认为解决方法是分两步比较值:ether[0:2]然后是ether[2]