
1,ip_rcv收到包之后,调用NF_HOOK,NF_HOOK首先调用nf_hook遍历NFPROTO_IPV4,
NF_INET_PRE_ROUTING的钩子点上的hook,然后执行ip_rcv_finish
2,ip_rcv_finish调用首先调用查找路由获取rtable,得到input方法,对于RTN_LOCAL,input=ip_local_ip_local_deliver,非RTN_LOCAL,input=ip_forward;之后调用dst_input;
3,如果是RTN_LOCAL进入ip_local_ip_local_deliver,遍历NFPROTO_IPV4
NF_INET_LOCAL_IN的钩子点的hook,最后执行ip_local_deliver_finish
4,非RTN_LOCAL则进入ip_forward,之后遍历NFPROTO_IPV4
NF_INET_FORWARD的钩子点的hook,之后执行ip_forward_finish
5,ip_forward_finish调用ip_output,遍历NFPROTO_IPV4
NF_INET_POST_ROUTING钩子点的hook,之后执行ip_finish_output
本文概述了IP包从接收、路由到转发的过程,重点讲解了NF_HOOK、NF_INET_PRE_ROUTING、NF_INET_LOCAL_IN、NF_INET_FORWARD和NF_INET_POST_ROUTING等关键步骤,以及对应的hook函数和处理路径。
401

被折叠的 条评论
为什么被折叠?



