【问题标题】:Why does Bpf allow ether[0:2] and ether[0:4] but not ether[0:3]?为什么 Bpf 允许 ether[0:2] 和 ether[0:4] 但不允许 ether[0:3]?
【发布时间】: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


    【解决方案1】:

    pcap-filter 手册页证实了这一点(搜索“字节偏移量”),尽管它也没有提供其他信息。

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

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

    【讨论】:

      猜你喜欢
      • 2020-07-02
      • 1970-01-01
      • 1970-01-01
      • 2015-10-05
      • 2022-01-09
      • 1970-01-01
      • 2018-08-27
      • 2011-06-04
      • 1970-01-01
      相关资源
      最近更新 更多