(本章基于:
Linux
-4.4.0-37)
linux 内核中有一套hook函数机制,可在不同hook点位置监控网络数据包,并执行丢弃、修改等操作。网络防火墙就是通过此机制实现的。
注册注销hook函数:
linux/netfilter.h
注册钩子函数:
int nf_register_hook(struct nf_hook_ops *reg);
注销:
void nf_unregister_hook(struct nf_hook_ops *reg);
struct nf_hook_ops数据结构:
struct nf_hook_ops {
struct list_head list;
/* User fills in from here down. */
nf_hookfn*hook;//hook处理函数
struct net_device*dev;
void*priv;
u_int8_tpf;//协议类型
unsigned inthooknum;//hook点
/* Hooks are ordered in ascending priority. */
intpriority;//优先级
};
list:链表结构,被注册的nf_hook_ops实际是以链表节点的形式存储在nf_hooks中的,nf_hooks是一个二维数组,后面详细介绍;
hook:hook处理函数,当接收到一个数据包后,调用此函数进行处理;
pf: