本次的任务是要在linux下利用netfilter往内核挂钩子,截获数据包。
这几天的练习,发现很多结构体以及技术涉及到内核版本,如果你发现有些结构体的成员什么的未定义,大多是这种问题。本机内核版本2.6.32-21-generic。查看内核版本命令uanme -r。
通俗的说,netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理(如包过滤,NAT等,甚至可以是 用户自定义的功能)。
IP层的五个HOOK点的位置如下所示 [1]:NF_IP_PRE_ROUTING:刚刚进入网络层的数据包通过此点(刚刚进行完版本号,校验和等检测), 目的地址转换在此点进行; [2]:NF_IP_LOCAL_IN:经路由查找后,送往本机的通过此检查点,INPUT包过滤在此点进行; [3]:NF_IP_FORWARD:要转发的包通过此检测点,FORWORD包过滤在此点进行;