|
我的思路是在模块初始化时,将要一组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]赋的值啊。
请高手指点到底哪里出错了?是不是哪里的思路有问题?谢谢!
. |
|