| 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
关注「黑光技术」,关注大数据+微服务