Chinaunix

标题: 是不是所有入站和出站数据包都要经过netfilter的所有hook? [打印本页]

作者: superwujc    时间: 2014-12-01 15:22
标题: 是不是所有入站和出站数据包都要经过netfilter的所有hook?
即使没有在netfilter的hook上注册任何callback?
作者: Godbach    时间: 2014-12-01 18:50
回复 1# superwujc

启用了 netfilter 的话,且注册了对应 hook 的话,是需要走的。

   
作者: superwujc    时间: 2014-12-01 19:51
回复 2# Godbach
非常感谢楼上,小弟菜鸟,谈一下自己的看法:

如果启用了netfilter的话,NF_HOOK()与三层与二层协议的处理函数之间是有交互操作的

因此启用netfilter相当于在数据包的必经之路上设置了路卡,注册在hook上的callback相当于路卡上的值班人员

但不论路卡上是否有人值班(是否注册了相应的callback),数据包都会到达路卡门前

若有,则数据包是否被允许通过,何时通过,以及按何种方式通过,都是路卡值班人员说了算

若没有,则数据包会直接通过路卡

简言之,启用netfilter的情况下,数据包一定经过hook点,而不论是否有callback

如有不对敬请指正,谢谢。
作者: breakCU    时间: 2014-12-02 10:01
看一下ip_rcv 最后的return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, NULL,
                       ip_rcv_finish);
作者: superwujc    时间: 2014-12-02 13:01
回复 4# breakCU
非常感谢,小弟正在学习

顺便问一下,有关内核源码实现的教程中,都提到了helper method/ helper function/ helper routine,例如获取L4,L3,L2首部的skb_transport_header(),skb_network_header(),skb_mac_header()

但是自己google了许久都没有找到内核 helper method的完整列表,说明文档等

kernel官网倒是提供了一份kernel API文档,但是具体点helper method并未提及

这样的话,在写内核模块的时候,无法确定具体的任务是否有特定的helper method,是不是要自己实现

难道只能在内核源码中寻找,然后逐个尝试?


请指点一下这个问题,谢谢。

   
作者: breakCU    时间: 2014-12-02 13:39
看协议栈代码,看UNIX/LINUX网络编程+LINUX内核API完全参考手册。反正是RFSC!回复 5# superwujc


   
作者: superwujc    时间: 2014-12-02 14:06
回复 6# breakCU

RFSC啥意思?
   
作者: superwujc    时间: 2014-12-02 14:22
回复 6# breakCU
好吧,Read the F*cking Source Code

多谢。


   
作者: zsszss0000    时间: 2014-12-03 17:18
我靠,网上有很多大神对netfilter的架构的分析文章,找找看看
作者: beyondfly    时间: 2014-12-03 20:31
学习了     




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2