标签:
参考: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 */
标签:
原文地址:http://www.cnblogs.com/qmdlinux/p/5102897.html