socket中BPF的设置
来源:互联网 发布:网络和信息化建设规划 编辑:程序博客网 时间:2024/06/16 13:04
* - Ethernet Type = IP (0x0800)
* - IP Protocol Type = UDP (17)
* - Not an IP fragment
* - UDP Port = DHCP Client (68)
*
* If all of the above conditions are met, this frame is copied (via a
* call to recv) to the DhcpCMgr for processing. Otherwise, the frame
* is dropped by the Linux stack.
定义BPF:
static struct sock_filter dhcp_bpf_filter [] = {
/* Make sure this is an IP packet... */
BPF_STMT (BPF_LD + BPF_H + BPF_ABS, 12),
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, ETHERTYPE_IP, 0, 8),
/* Make sure it's a UDP packet... */
BPF_STMT (BPF_LD + BPF_B + BPF_ABS, 23),
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, IPPROTO_UDP, 0, 6),
/* Make sure this isn't a fragment... */
BPF_STMT(BPF_LD + BPF_H + BPF_ABS, 20),
BPF_JUMP(BPF_JMP + BPF_JSET + BPF_K, 0x1fff, 4, 0),
/* Get the IP header length... */
BPF_STMT (BPF_LDX + BPF_B + BPF_MSH, 14),
/* Make sure it's to the right port... */
BPF_STMT (BPF_LD + BPF_H + BPF_IND, 16),
BPF_JUMP (BPF_JMP + BPF_JEQ + BPF_K, 68, 0, 1),
/* If we passed all the tests, ask for the whole packet. */
BPF_STMT(BPF_RET+BPF_K, (u_int)-1),
/* Otherwise, drop it. */
BPF_STMT(BPF_RET+BPF_K, 0),
};
设置BPF:
struct sock_fprog pf;
memset(&pf, 0, sizeof(pf));
pf.filter = dhcp_bpf_filter;
pf.len = dhcp_bpf_filter_len;
rc = setsockopt(sock, SOL_SOCKET, SO_ATTACH_FILTER, &pf, sizeof(pf));
- socket中BPF的设置
- 使用socket BPF
- BPF socket filter
- bpf
- bpf
- libnet使用举例(14)----从libnet中挖掘BPF的发包机制
- 探索iptables BPF模块的悲惨历程
- linux 下的 包过滤器 BPF
- python中关于socket的timeout设置的问题
- BackTrack5r3中执行nmap时提示invalid bpf filter
- 使用EOS中bpf创建流程失败问题解决办法
- 设置Socket的属性
- SOCKET设置的参数
- 设置socket的属性
- socket参数的设置
- C#中设置Socket连接请求的超时
- 记录一下socket中常见的TCP设置
- MFC中设置socket超时
- 理解Load Average做好压力测试
- git生成SSH keys遇到的问题
- 打印机打印文件时,状态为spooling而不打印任何东西
- java转换多种String格式到Date的类工具类
- 抽象工厂
- socket中BPF的设置
- 如何在沉默中暴发
- Linux 的内存机制
- Memcached使用点滴
- extern 的用法
- Xcode6与Xcode5之间的细节差别(Precompile Prefix Header)
- PHP面向对象开发(三)
- matlab eps是什么
- 数字证书原理