网络[七]:NetFilter(3)

了解了这些值再来看nf_hook_slow()中对于nf_iterate()返回值的处理就明了了:

 

if (verdict == NF_ACCEPT || verdict == NF_STOP) {       ret = 1;   else if (verdict == NF_DROP) {       kfree_skb(skb);       ret = -EPERM;   else if ((verdict & NF_VERDICT_MASK) == NF_QUEUE) {       if (!nf_queue(skb, elem, pf, hook, indev, outdev, okfn,                verdict >> NF_VERDICT_BITS))           goto next_hook;   }  

        最后还是以bridge来说明下hooks参数的意义,上面已经讲过,它决定了在协议流程的何处调用勾子函数;因为使用NetFilter的目的是在内核态处理报文,而哪些地方可以处理报文只能是内核已经定义好的。一般来说,内核会在报文发送和接收的关键位置添加勾子函数处理,查找代码中NF_HOOK即可知。下面以bridge,为例,来看下在哪些地方用到了,以及这些值的含义:

  

网络[七]:NetFilter

网络[七]:NetFilter

        NetFilter的存在使得在内核空间对报文进行用户定义的要求处理变得可能、简单。一般来说,编写好struct nf_hook_ops,其中hook/pf/ hook是必给的参数,然后使用nf_register_hook进行注册就可以了。整个过滤文件可以写了一个内核模块,用insmod进行动态加载。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wypjxx.html