免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2478 | 回复: 7
打印 上一主题 下一主题

向netfilter框架注册钩子的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-03-01 20:00 |只看该作者 |倒序浏览
我想写一个可以动态加载与卸载的模块,可以向下面的代码所示,在模块中注册了两个钩子函数:
int init_module()
{
*/初始化钩子函数填充hook数据结构*/
nf_hook.hook=nfkiller;
nf_hook.Pf=PF_INET;
nf_hookk.hooknum=NF_IP_FORWARD;//使用Ipv4的第一个hook
nf_hook.prioriyt=NF_IP_FIRST;//让添加的函数首先执行


cf_hook.hook=cfkiller;
cf_hook.Pf=PF_INET;
cf_hookk.hooknum=NF_IP_FORWARD;//使用Ipv4的第一个hook
cf_hook.prioriyt=NF_IP_FIRST;//让添加的函数首先执行

nf_register_hook(&nf_hook);//注册钩子函数
nf_register_hook(&cf_hook);

return 0;
}

请问可以这样在一个模块中注册2个或者2个以上的钩子函数吗?可以的话,那数据包在经过forward点时,这两个钩子函数的执行顺序是怎样的?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
2 [报告]
发表于 2011-03-01 21:10 |只看该作者
可以的,一次性注册更多的都可以

论坛徽章:
0
3 [报告]
发表于 2011-03-02 10:41 |只看该作者
谢谢热心的版主啦,^_^还有个问题就是,这个两个钩子函数的优先级都是NF_IP_FIRST的话,那处理的先后顺序是怎样的啊?

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
4 [报告]
发表于 2011-03-02 11:57 |只看该作者
回复 3# onlyff608


    优先级 和 hook 点一起确定一个 hook 函数的工作位置

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
5 [报告]
发表于 2011-03-02 12:34 |只看该作者
谢谢热心的版主啦,^_^还有个问题就是,这个两个钩子函数的优先级都是NF_IP_FIRST的话,那处理的先后顺序是 ...
onlyff608 发表于 2011-03-02 10:41



    先注册的先执行,后注册的后执行,顺序链。

论坛徽章:
36
IT运维版块每日发帖之星
日期:2016-04-10 06:20:00IT运维版块每日发帖之星
日期:2016-04-16 06:20:0015-16赛季CBA联赛之广东
日期:2016-04-16 19:59:32IT运维版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-19 06:20:00每日论坛发贴之星
日期:2016-04-19 06:20:00IT运维版块每日发帖之星
日期:2016-04-25 06:20:00IT运维版块每日发帖之星
日期:2016-05-06 06:20:00IT运维版块每日发帖之星
日期:2016-05-08 06:20:00IT运维版块每日发帖之星
日期:2016-05-13 06:20:00IT运维版块每日发帖之星
日期:2016-05-28 06:20:00每日论坛发贴之星
日期:2016-05-28 06:20:00
6 [报告]
发表于 2011-03-02 13:53 |只看该作者
嗯,这个函数 nf_register_hook 实现的也很清楚
int nf_register_hook(struct nf_hook_ops *reg)
{
        struct nf_hook_ops *elem;
        int err;

        err = mutex_lock_interruptible(&nf_hook_mutex);
        if (err < 0)
                return err;
        list_for_each_entry(elem, &nf_hooks[reg->pf][reg->hooknum], list) {
                if (reg->priority < elem->priority)
                        break;
        }

        list_add_rcu(&reg->list, elem->list.prev);
        mutex_unlock(&nf_hook_mutex);
        return 0;
}


只有当带注册的 hook 优先级低于全局链表中的某个元素的优先级时,才会插到该元素的前面。

因此,如果两个同优先级的 hook 函数,注册在通过一个 hook 点,先注册的先执行。

但是,不建议这样做。优先级最好不要和已经注册的 优先级相同。

论坛徽章:
0
7 [报告]
发表于 2011-03-03 16:59 |只看该作者
回复 5# dreamice


谢啦

论坛徽章:
0
8 [报告]
发表于 2011-03-03 17:04 |只看该作者
回复 6# Godbach

谢啦
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP