Netfilter是Linux 2.4.x引入的一个子系统,它作为一个通用的、抽象的框架,提供一整套的hook函数的管理机制,使得诸如数据包过滤、网络地址转换(NAT)和基于协议类型的连接跟踪成为了可能。
netfilter的架构就是在整个网络流程的若干位置放置了一些检测点(HOOK),而在每个检测点上登记了一些处理函数进行处理。
netfilter架构中不同的协议类型有不同的HOOK。协议类型代码如下:
enum {
NFPROTO_UNSPEC = 0,
NFPROTO_IPV4 = 2, //IPV4
NFPROTO_ARP = 3, //arp
NFPROTO_BRIDGE = 7, //bridge
NFPROTO_IPV6 = 10, //ipv6
NFPROTO_DECNET = 12,
NFPROTO_NUMPROTO,
};
主要常用的是NFPROTO_IPV4,NFPROTO_IPV6,NFPROTO_ARP,NFPROTO_BRIDGE。
NFPROTO_IPV4,NFPROTO_IPV6 的Hooks使用的是nf_inet_hooks,代码如下:
enum nf_inet_hooks {
NF_INET_PRE_ROUTING,
NF_INET_LOCAL_IN,
NF_INET_FORWARD,
NF_INET_LOCAL_OUT,
NF_INET_POST_ROUTING,
NF_INET_NUMHOOKS
};
</