Netfilter結構就是在整個網絡處理流程中放置了一些檢測點,每個檢測點都可以對網絡資料包進行操作,IP層的五個hook點如圖:
如何使用?
1,實作nf_hook_ops結構體
static struct nf_hook_ops hook_out = {
.hook = (nf_hookfn *)hook _out_process, //hook函數
.pf = NFPROTO_IPV4,
.hooknum = NF_INET_LOCAL_OUT, //hook位置
.priority = NF_IP_PRI_FIRST, //執行優先級
.owner = THIS_MODULE,
};
2,實作hook函數
unsigned int hook_out_process(unsigned int hooknum, struct sk_buff *skb, const struct net_device *in, const struct net_device *out, int (*okfn)(struct sk_buff *))
{
//處理資料包
}
3,核心的注冊和解除安裝