Networking 为什么Bpf允许乙醚[0:2]和乙醚[0:4],但不允许乙醚[0:3]?

Networking 为什么Bpf允许乙醚[0:2]和乙醚[0:4],但不允许乙醚[0:3]?,networking,wireshark,packet-sniffers,bpf,Networking,Wireshark,Packet Sniffers,Bpf,为什么Berkeley数据包筛选器允许对以太[0:2]和以太[0:4]进行筛选,但不允许对供应商以太[0:3]进行筛选?tcpdump'ether[0:3]=0x000000'返回 tcpdump:数据大小必须为1、2或4手册页(搜索“字节偏移量”)确认了这一点,但手册页也没有提供其他信息 我猜libpcap需要创建一个一次比较三个字节的程序,因为它生成的经典BPF程序直接支持这种比较。它可以将一个字节、一个半字(两个字节)或一个字(四个字节)加载到其中一个寄存器中,并将其与一个值进行比较,但不

为什么Berkeley数据包筛选器允许对以太[0:2]和以太[0:4]进行筛选,但不允许对供应商以太[0:3]进行筛选?
tcpdump'ether[0:3]=0x000000'
返回
tcpdump:数据大小必须为1、2或4

手册页(搜索“字节偏移量”)确认了这一点,但手册页也没有提供其他信息

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

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