netfilter在IPV4中的5个HOOK

| 2011年2月19日

之前就知道在内核中netfilter的工作原理是:在协议流程中加入hook函数,从而达到对协议流中的数据进行抓取,今天对IPV4中的这几个点在内核中找了下,终于定位了。先在这里分析一下,还需要分析,数据包在内核中是如何路由的!!!哈呵呵

115  net/ipv4/ip_forward.c <<ip_forward>> return NF_HOOK(NFPROTO_IPV4, NF_INET_FORWARD, skb, skb->dev, 
264  net/ipv4/ip_input.c <<ip_local_deliver>> return NF_HOOK(NFPROTO_IPV4, NF_INET_LOCAL_IN, skb, skb->dev, NULL, 
443  net/ipv4/ip_input.c <<ip_rcv>> return NF_HOOK(NFPROTO_IPV4, NF_INET_PRE_ROUTING, skb, dev, NULL, 
275  net/ipv4/ip_output.c <<ip_mc_output>> NF_HOOK(NFPROTO_IPV4, NF_INET_POST_ROUTING, 
291  net/ipv4/ip_output.c <<ip_mc_output>> NF_HOOK(NFPROTO_IPV4, NF_INET_POST_ROUTING, newskb, 
94  net/ipv4/ip_output.c <<__ip_local_out>> return nf_hook(NFPROTO_IPV4, NF_INET_LOCAL_OUT, skb, NULL,

从上面看出了其中有5个点:NF_INET_FORWARD,NF_INET_LOCAL_IN, NF_INET_PRE_ROUTING, NF_INET_POST_ROUTING,NF_INET_LOCAL_OUT。

这5个点之间的流程关系如下:

NF_INET_PRE_ROUTING | | v route—->NF_INET_FORWARD—–>NF_INET_POST_ROUTING |                                                                | |                                                                | v                                                                v NF_INET_LOCAL_IN                                  NF_INET_LOCAL_OUT |                                                                | |                                                                | v                                                                v ocal process                                      local process

看完本文有收获?请分享给更多人

关注「黑光技术」,关注大数据+微服务