li_freedom 发表于 2014-05-28 13:35

关于netfilter中hooknum的疑问



在init函数里面注册了一个hook:

struct nf_hook_ops nfho;
void init(){
nfho.hook         = intercept_pkts;
nfho.pf               = AF_INET;
nfho.hooknum   = NF_INET_FORWARD;
nfho.priority      = NF_IP_PRI_FIRSR;

ret = nf_register(&nfho);
.......
}


initercept_pkts(unsigned int hooknum,struct sk_buff *_skb,.........)
{
                printk("hooknum = %d\n",hooknum);

               .........
}



问题是:

    initercept_pkts函数里面打印的hooknum的值是个随机数。


这个地方的值不应该就是那5个hook点对应的值吗?这里为什么会出现随机值呢?
不是NF_HOOK宏传入AF_INET和NF_INET_FORWARD当参数的时候才会调用到initercept_pkts函数吗?

   麻烦哪位大神给解释一下好吗。

瀚海书香 发表于 2014-05-28 14:25

回复 1# li_freedom
initercept_pkts函数里面打印的hooknum的值是个随机数。

NF_INET_FORWARD应该一直打印2的,怎么会随机呢?你随机是什么概念?(0-4之间随机,还是出现其他的数了)
   

li_freedom 发表于 2014-05-28 14:35

回复 2# 瀚海书香

对我知道那个定义是2   但是我打印出来的不是2   是个随机数如32148042-12560131等这种值,很奇怪为什么会出现这种情况。
   

当调用initercept_pkts函数的时候不是应该内核里面调用的NF_HOOK(AF_INET,NF_INET_FORWARD,。。。。)的时候才有可能调用的我注册的hook函数吗?

瀚海书香 发表于 2014-05-28 16:03

回复 3# li_freedom
当调用initercept_pkts函数的时候不是应该内核里面调用的NF_HOOK(AF_INET,NF_INET_FORWARD,。。。。)的时候才有可能调用的我注册的hook函数吗?
是这样的。
应该是你代码写的有问题,我在本地验证了一下不会出现随机的情况。

   

oscarvei 发表于 2014-05-28 16:28

回复 1# li_freedom


    unsigned int    hooknum;

li_freedom 发表于 2014-05-29 09:03

问题解决了   是因为内核版本的问题。函数参数改变了呵呵
页: [1]
查看完整版本: 关于netfilter中hooknum的疑问