kernel版本 3.10.0-514.el7.x86_64
netfilter框架通过在内核网络协议栈五个数据包处理点注册回调函数,调用这些回调函数实现数据包过滤、修改、转发。
表示回调函数的hook结构体如下:
struct nf_hook_ops {
struct list_head list; //hook钩子函数双向列表,每一个hook点可以注册多个钩子函数
/* User fills in from here down. */
nf_hookfn *hook; //hook点的钩子函数
struct module *owner; //所属模块指针
void *priv; //猜测应该是私有数据,2.6.37版本没有这个字段
u_int8_t pf; //协议族编号,如ipv4协议: PF_INET
unsigned int hooknum; //hook点编号,如 NF_INET_POST_ROUTING
/* Hooks are ordered in ascending priority. */
int priority; //优先级,hook点注册的钩子函数列表按照优先级由高到底插入
//2.6.37版本还没有下列字段
/* Reserved for use in the future RHEL versions. Set to zero. */
unsigned long __rht_reserved1;
unsigned long __rht_reserved2;
unsigned long __rht_reserved3;
unsigned long __rht_reserved4;
unsigned long __rht_reserved5;
};
hook钩子函数原型如下: