为什么伯克利包过滤器允许对以供应商为单位的ether [0:2]和ether [0:4]进行过滤,但不允许以ether [0:3]进行过滤?tcpdump 'ether[0:3] = 0x000000'
返回
tcpdump: data size must be 1, 2, or 4
答案 0 :(得分:1)
pcap-filter手册页(搜索“字节偏移”)对此进行了确认,尽管它也未提供其他信息。
我的猜测是libpcap refuses创建一个一次比较三个字节的程序,因为它生成的经典BPF程序do not have instructions直接支持这种比较。它可以将一个字节,一个半字(两个字节)或一个字(四个字节)加载到一个寄存器中,并将其与一个值进行比较,但是它不能使用三字节长的值。
我认为解决方法是分两步比较值:ether[0:2]
然后是ether[2]
。