netfilter在IPV4中的5个HOOK

2011年2月19日 | 由 helight | 300字 | 阅读大约需要1分钟 | 归档于 kernel | 标签 #wsgi #protobuf

之前就知道在内核中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