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

学习了     
页: [1]
查看完整版本: 是不是所有入站和出站数据包都要经过netfilter的所有hook?