包过滤指令

参考:https://www.kernel.org/doc/Documentation/networking/filter.txt

tcpdump的-dd可以dump出过滤指令。

在设置socket的包过滤时,用到结构体linux/filter.h/struct sock_filter{

  __u16 code; // 操作码

  __u8 jt; // Jump if true

  __u8 jf; // Jump if false

  __u32 k; // 参数,不同操作码用图不同

}

每一个struct socket_filter代表一条指令。

BPF(Berkeley Packet Filter)定义了一些宏帮助构造过滤指令。

#define BPF_STMT(code, k) { (unsigned short)(code), 0, 0, k }  

#define BPF_JUMP(code, k, jt, jf) { (unsigned short)(code), jt, jf, k }  

BPF_LD:将值拷贝到寄存器

  BPF_W   0x00    /* word */
BPF_H 0x08 /* half word */
BPF_B 0x10 /* byte */
BPF_DW 0x18 /* eBPF only, double word */

 

你可能感兴趣的:(包过滤指令)