Netfilter笔记-02

Netfilter在kernel中设置协议特定的hook节点,用于数据包sk_buff的过滤。struct nf_hook_ops结构体是其核心,采用双向循环链表设计。注册hook节点通过nf_register_hook函数实现,该函数将hook按优先级插入链表。在iptable_nat_init模块中,nf_register_hooks注册了ipv4hook节点。nf_register_hook函数遍历nf_hooks链表,按优先级从高到低插入新hook。完成注册后,内核等待数据包触发hook流程。
摘要由CSDN通过智能技术生成

Netfilter说白了就是针对不同的协议(协议类型和hook节点我们上一章已经讲过)在kernel中放置了不同的hook节点,等数据包sk_buff,到来的时候,要给hook节点进行过滤,下图为IP层的五个hook点的位置:

 

在讲具体流程之前我们要介绍一个结构体:struct nf_hook_ops

struct nf_hook_ops {
        struct list_head list;    //链表

        /* User fills in from here down. */
        nf_hookfn *hook;            //hook的处理函数    
        struct module *owner;
        u_int8_t pf;                 //协议类型
        unsigned int hooknum;        //hook点,也就是上图的5个hook点
        /* Hooks are ordered in ascending priority. */
        int priority;        //优先级(越小优先级越高)
};

从结构体的内容可以看书,它是双向循环链表的数据结构,在kernel代码中很常见到list_head。

下面我们分析hooks的注册流程。

首先我们要注册h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值