netfilter在IPV4中的5个HOOK

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

Leave a Reply

Your email address will not be published. Required fields are marked *