- 论坛徽章:
- 0
|
原帖由 Godbach 于 2008-8-12 13:50 发表
三、IP层接收和发送数据包进入连接跟踪钩子函数的入口
整个分析是基于IP层进行的。
1. IP层接收数据包的函数为:ip_rcv()ip_input.c
该函数执行到最后:
return NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, s ...
2. IP层发送数据包(TCP包)的函数为:
int ip_queue_xmit(struct sk_buff *skb) ip_output.c
该函数执行到最后:
returnNF_HOOK(PF_INET, NF_IP_LOCAL_OUT, skb, NULL, rt->u.dst.dev,
ip_queue_xmit2);
执行所有(NF_IP_PRE_ROUTING,这个地方应该是NF_IP_LOCAL_OUT)上的钩子,仅当所有钩子函数都返回NF_ACCEPT,接着执行ip_queue_xmit2。由于连接跟踪的优先级最高,所以先执行连接跟踪的钩子函数ip_conntrack_local(),该函数处理一下Raw Socket之后,接着调用ip_conntrack_in()进行处理。 |
|