【发布时间】:2019-04-15 10:40:28
【问题描述】:
为什么 Berkeley Packet Filter 允许过滤 ether[0:2] 和 ether[0:4] 而不是供应商 ether[0:3]?tcpdump 'ether[0:3] = 0x000000' 返回
tcpdump: data size must be 1, 2, or 4
【问题讨论】:
标签: networking wireshark packet-sniffers bpf
为什么 Berkeley Packet Filter 允许过滤 ether[0:2] 和 ether[0:4] 而不是供应商 ether[0:3]?tcpdump 'ether[0:3] = 0x000000' 返回
tcpdump: data size must be 1, 2, or 4
【问题讨论】:
标签: networking wireshark packet-sniffers bpf
pcap-filter 手册页证实了这一点(搜索“字节偏移量”),尽管它也没有提供其他信息。
我的猜测是 libpcap refuses 创建一个一次比较三个字节的程序,因为它生成的经典 BPF 程序 do not have instructions 直接支持这种比较。它可以将一个字节、一个半字(两个字节)或一个字(四个字节)加载到其中一个寄存器中并将其与一个值进行比较,但它不能处理三字节长的值。
我想解决方法是分两步比较值,ether[0:2] 然后ether[2]。
【讨论】: