BPF socket filter
来源:互联网 发布:阿里云总裁胡晓明辞职 编辑:程序博客网 时间:2024/06/09 13:42
以dhcpc过滤udp port 68为例,进行一下说明
参考:
X = 表示index reg.也就是文件定位器。目前X=0,X=skb->data. skb->data指定的ip hdr.A表示加速reg.保存临时变量static const struct sock_filter filter_instr[] = {/* load 9th byte (protocol) */BPF_STMT(BPF_LD|BPF_B|BPF_ABS, 9), //报文0位置+9位置中读出一字节放到A reg中。//BPF_LD=load. BPF_B = byte(1字节); BPF_ABS表示是绝对值=skb->data/* jump to L1 if it is IPPROTO_UDP, else to L4 *///A的值与IPPROTO_UDP相比,相等则jump到本行(本行为-1)的下一行(就是0行),不相等则jump到本行的offset=6的一行。//BPF_JMP,BPF_JEQ = if jump的意思。BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, IPPROTO_UDP, 0, 6),/* 从IP头(index=0)定位到6,并读出(BPF_H表示)两个字节。这是IP的分片标志。 *//* L1: load halfword from offset 6 (flags and frag offset) */BPF_STMT(BPF_LD|BPF_H|BPF_ABS, 6),/* jump to L4 if any bits in frag offset field are set, else to L2 *//* */BPF_JUMP(BPF_JMP|BPF_JSET|BPF_K, 0x1fff, 4, 0),/* L2: skip IP header (load index reg with header len) *//* 移动X,X+=*(X+k);本行中k=0; 也就是从IPhdr中读出一字节,把此字节的数据赋值给XBPF_MSH就是移动X的意思。*/BPF_STMT(BPF_LDX|BPF_B|BPF_MSH, 0),/* load udp destination port from halfword[header_len + 2] *//* BPF_IND从相对值X开始,加上k(2),在此位置取出一个16bit数据放到A中。 */BPF_STMT(BPF_LD|BPF_H|BPF_IND, 2),/* jump to L3 if udp dport is CLIENT_PORT, else to L4 *//* A的值==68? yes,则jump 0行(本行号=-1)no 则jump (本行号-1)第一行。 */BPF_JUMP(BPF_JMP|BPF_JEQ|BPF_K, 68, 0, 1),/* L3: accept packet ("accept 0x7fffffff bytes") *//* Accepting 0xffffffff works too but kernel 2.6.19 is buggy */BPF_STMT(BPF_RET|BPF_K, 0x7fffffff),//返回FF,表示成功。/* L4: discard packet ("accept zero bytes") */BPF_STMT(BPF_RET|BPF_K, 0),//返回0表示失败。
参考:
http://blog.csdn.net/ljy1988123/article/details/50444693
阅读全文
0 0
- BPF socket filter
- 使用socket BPF
- libpcap BSD Packet Filter(BPF)
- socket中BPF的设置
- Introduction to Seccomp: BPF linux syscall filter
- bpf
- bpf
- BPF(BSD Packet Filter)--应用和理念扩展
- Libpcap BPF(BSD Packet Filter)包过滤机制
- tcpdump/libpcap与BPF与Linux(LPF-Linux Packet Filter)
- BackTrack5r3中执行nmap时提示invalid bpf filter
- 伯克利包过滤(Berkeley Packet Filter,BPF)语言
- Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)
- Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)
- BPF(Berkeley Packet Filter)内核应用性能调优之 高效的驱动级网络数据包处理
- zz bpf过滤规则
- bpf过滤规则
- PF_RING使用BPF过滤器
- The Tag Game
- jsp(服务器目录结构)
- 6.6提纲
- 动态网页开发基础
- BZOJ4870: [Shoi2017]组合数问题
- BPF socket filter
- android面试题整理
- [算分]线性规划总结
- 我对SG函数的理解
- 方波上升沿下降沿毛刺问题
- Java线程:新特征-线程池
- 排序之归并排序
- JSP数据交换(一)
- Trie树的原理和实现Java版