免费注册 查看新帖 |

Chinaunix

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

[FreeBSD] 请教 kld 挂接网络模块的问题…… [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-07-21 17:29 |只看该作者 |倒序浏览
看了雨丝风片 前辈写的
一个用kld替换内核函数指针的例子
http://bbs.chinaunix.net/viewthread.php?tid=768019
里边提到:old_icmp_input = inetsw[ip_protox[IPPROTO_ICMP]].pr_input;
这句是指将原来程序的icmp相关接口赋给一个变量,后来我在\usr\src\sys\netinet\in_proto.c找到了这个数组,

不过发现,只有到本机的包才会调用这些数组中的模块,转发的就不会调用,要能让转发的包也能被处理到的模
块应该到哪里去找呢?  相关的文档没找到几章啊,还请诸位大牛们赐教一番啊~

论坛徽章:
0
2 [报告]
发表于 2008-07-21 18:47 |只看该作者
原帖由 kkkhmy 于 2008-7-21 17:29 发表
看了雨丝风片 前辈写的
一个用kld替换内核函数指针的例子
http://bbs.chinaunix.net/viewthread.php?tid=768019
里边提到:old_icmp_input = inetsw].pr_input;
这句是指将原来程序的icmp相关接口赋给一个 ...


有段时间没摸BSD协议栈的代码了。。。大致看了一下源代码,
netisrs[NETISR_IP].ni_handler在ip_init()函数里初始化为ip_input(),
ip输入报文基本上都要走这儿进来,而ip_forward()函数是在ip_input()内部调用的,
把netisrs[NETISR_IP].ni_handler替换一下就可以截获ip输入报文,包括需要转发的
报文。具体是否可行你还要试验一下。

另,在ip处理流程里面已经有不少成熟的钩子可供使用,这些在ip_input()的代码里
就可以看到,你可以试试利用这些已有的机制达到你的目的。

论坛徽章:
0
3 [报告]
发表于 2008-07-21 19:20 |只看该作者
谢谢。
我这就去试试……

论坛徽章:
0
4 [报告]
发表于 2008-07-22 17:44 |只看该作者
恩……  
试了下这个……netisrs[NETISR_IP].ni_handler
不过这个netisrs结构体搞得不是很清楚啊,总是编译通不过……
我也在netisr.c 里面找到它的定义了…… 没弄出来
后来仔细看来下ip_input.c
最后用的这个
pfh_inet = pfil_head_get(PFIL_TYPE_AF, AF_INET);

可以看到转发的包了……

开源的东西 好是好,总觉得这个玩意太大 感觉没处下口啊……
看代码 看着看着就要调用个什么,又要去找到来看,这么多天了
感觉进展很慢啊……:em11:
前辈们 关于FREEBSD的源码有没有中文的书或者教程啊,要是有 网络方面 的就最好了

感谢 雨丝风片 对我的帮助,
等我把这个多研究下下 写个心得出来……

[ 本帖最后由 kkkhmy 于 2008-7-22 17:53 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP