免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3385 | 回复: 3
打印 上一主题 下一主题

请教LINUX下可以直接写包过滤的BPF代码吗? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-06-25 17:10 |只看该作者 |倒序浏览
1。 从网上看到一些包过滤的代码,是通过tcpdump -dd 转换过来的,这个算一个方法。

2。 但是如果我想直接使用BPF的代码行不行呢?
   
struct bpf_insn insns[] = {
        BPF_STMT(BPF_LD+BPF_H+BPF_ABS, 12),
        BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, ETHERTYPE_IP, 0, ,
        BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 26),
        BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 2),
        BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
        BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 3, 4),
        BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x80037023, 0, 3),
        BPF_STMT(BPF_LD+BPF_W+BPF_ABS, 30),
        BPF_JUMP(BPF_JMP+BPF_JEQ+BPF_K, 0x8003700f, 0, 1),
        BPF_STMT(BPF_RET+BPF_K, (u_int)-1),
        BPF_STMT(BPF_RET+BPF_K, 0),
};

这段代码是从man bpf 手册里COPY出来的,不知道LINUX能不能编译呢,如果不能编译,要通过什么工具才行呢?

论坛徽章:
0
2 [报告]
发表于 2009-06-25 19:38 |只看该作者
还是实践出真知啊。

试了一下,可以编译,看来以后可以直接写BPF格式的过滤代码了,不用再TCPDUMP -DD。

(早知道能编译,就不发这个贴了。 不过要加入<linux/filter.h> 头文件).

[ 本帖最后由 rockcanon 于 2009-6-25 19:39 编辑 ]

论坛徽章:
0
3 [报告]
发表于 2009-06-25 22:34 |只看该作者
tcpdump就是把命令行上的参数翻译成BPF代码,然后编译成进内核进行过滤的

论坛徽章:
0
4 [报告]
发表于 2009-06-26 11:16 |只看该作者
楼上错了,TCPDUMP -dd 翻译过来的是C语言用的,就是机器码。不是给人看的。 建议看下
http://www.gsp.com/cgi-bin/man.cgi?section=4&amp;topic=bpf

如果想混积分就不要乱说。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP