是否定义了Berkeley Packet Filter操作码值实现?
我一直认为tcpdump / libpcap在BPF领域具有权威性。我注意到linux内核和tcpdump读取BPF过滤器的方式不同。 BPF助记符和行为是相同的,但实际的操作码值本身看起来不同。我在互联网上寻找“标准”,但我发现的所有内容都只有助记符。
答案 0 :(得分:1)
不,除了某些BPF口译员/ JIT支持但其他人没有的指示外,他们有相同的二进制值。比较,例如,当前的libpcap pcap / bpf.h至少包含3.19内核中的Linux linux / bpf_common.h和linux / filter.h,并注意linux / filter.h中的注释: / p>
/*
* Try and keep these values and structures similar to BSD, especially
* the BPF code definitions which need to match so you can share filters
*/
和libpcap中的代码,它使用相同的编译器为Linux内核生成BPF代码,* BSD / OS X / Solaris 11 /等。内核和userland BPF解释器,只需要很少的代码更改来处理获取数据包元数据(而不是数据包数据)。