LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1165|回复: 1

netfilter编程中遇到的问题:这个问题是由hook函数接收包的速度还是其它原因?

[复制链接]
发表于 2006-11-19 10:56:59 | 显示全部楼层 |阅读模式
我的思路是在模块初始化时,将要一组IP地址从一个文件中读出,放到一个数组中
char * souip[20];
然后在hook函数中进行比较,如下:
.........
iph=(*skb)->nh.iph;
if(iph->saddr==in_aton("130.24.0.13")){

                        return NF_DROP;
}
return NF_ACCEPT;

以上操作是没有问题的。下面说一下 调试时 三种情况遇到的问题:

(1)如果做一下改动,比如把"130.24.0.13"从文件中读出,存入souip[0],,然后对
iph->saddr==in_aton(souip[0]) 进行比较 结果就是假了;

(2)或者用for循环,看看souip[]数组里面有没有iph->saddr时,就始终为假,发现不了要屏蔽的地址;这会不会是for循环有时延,而hook函数调用的速度快于for速度,使得比较的时候iph->saddr的值已经变化了?

(3)更奇怪的是,下列比较
in_aton(aa[0])==in_aton("130.34.0.13");
开始是出现为真。访问该IP网站 弹出一个对话框 说 无法连接;但是响应了这个对话筐后,就可以连接了,hook函数好像就失去作用了。难道aa[0]的地址被改变了吗?但是我只在模块初始化的时候给aa[0]赋的值啊。

请高手指点到底哪里出错了?是不是哪里的思路有问题?谢谢!
.
 楼主| 发表于 2006-11-19 22:58:26 | 显示全部楼层
原因找到 ,是 字符串 指针的赋值引起的。应该使用strcpy函数赋值,不能通过指针直接赋值,那样操作系统可能会定期清理空间,造成地址丢失,从而数据丢失。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表