关于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函数吗?
麻烦哪位大神给解释一下好吗。 回复 1# li_freedom
initercept_pkts函数里面打印的hooknum的值是个随机数。
NF_INET_FORWARD应该一直打印2的,怎么会随机呢?你随机是什么概念?(0-4之间随机,还是出现其他的数了)
回复 2# 瀚海书香
对我知道那个定义是2 但是我打印出来的不是2 是个随机数如32148042-12560131等这种值,很奇怪为什么会出现这种情况。
当调用initercept_pkts函数的时候不是应该内核里面调用的NF_HOOK(AF_INET,NF_INET_FORWARD,。。。。)的时候才有可能调用的我注册的hook函数吗? 回复 3# li_freedom
当调用initercept_pkts函数的时候不是应该内核里面调用的NF_HOOK(AF_INET,NF_INET_FORWARD,。。。。)的时候才有可能调用的我注册的hook函数吗?
是这样的。
应该是你代码写的有问题,我在本地验证了一下不会出现随机的情况。
回复 1# li_freedom
unsigned int hooknum;
问题解决了 是因为内核版本的问题。函数参数改变了呵呵
页:
[1]