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