分享:Netfileter & Iptables 实现之 Netfilter实现

在 图1 中,蓝色部分就是 Netfilter 挂载钩子函数的位置,所以 Netfilter 定义了 5 个常量来表示这 5 个位置,如下代码:


  1. // 文件:include/linux/netfilter_ipv4.h 
  2.  
  3. #define NF_IP_PRE_ROUTING   0 
  4. #define NF_IP_LOCAL_IN      1 
  5. #define NF_IP_FORWARD       2 
  6. #define NF_IP_LOCAL_OUT     3 
  7. #define NF_IP_POST_ROUTING  4 

上面代码中的常量与 图1 中挂载钩子函数的位置一一对应,如常量 NF_IP_PRE_ROUTING 对应着 图1 的 PRE_ROUTING 处。

如 图2 所示,Netfilter 的每个挂载点都使用一个链表来存储钩子函数列表。在内核中,定义了一个名为 nf_hooks 的数组来存储这些链表,如下代码:


  1. // 文件:net/core/netfilter.c 
  2.  
  3. struct list_head nf_hooks[32][5]; 

struct list_head 结构是内核的通用链表结构。

从 nf_hooks 变量定义为一个二维数组,第一维是用来表示不同的协议(如 IPv4 或者 IPv6,本文只讨论 IPv4,所以可以把 nf_hooks 当成是一维数组),而第二维用于表示不同的挂载点,如 图2 中的 5 个挂载点。
 

【声明】:芜湖站长网内容转载自互联网,其相关言论仅代表作者个人观点绝非权威,不代表本站立场。如您发现内容存在版权问题,请提交相关链接至邮箱:bqsm@foxmail.com,我们将及时予以处理。

相关文章