免费注册 查看新帖 |

Chinaunix

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

[内核模块] netfilter在NF_ARP_IN处HOOK不到数据,各位帮忙分析下 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2013-10-08 21:42 |只看该作者 |倒序浏览
       
代码如下:


             unsigned int hook_arp_in(unsigned int hooknum,
                                                struct sk_buff **sb,
                                                const struct net_device *in,
                                                const struct net_device *out,
                                                int (*okfn)(struct sk_buff *))
             {
                int NIC = -1;
                printk(" hook_arp_in!!!\n");
                if(*sb)
                   function(*sb);
                return NF_STOLEN;
             }
         ....
        nfarp_in.hook = hook_arp_in;
        nfarp_in.hooknum = NF_ARP_IN;
        nfarp_in.pf = NF_ARP;
        nfarp_in.owner = THIS_MODULE;
        if(nf_register_hook(&nfarp_in) < 0)
                printk("register_hook failed!!!!\n");
        ....


把代码的其他地方都注释掉了,基本就剩了上面的这点代码。加载模块之后,根本不会进到 hook_arp_in()里面,而且系统的arp的过程没受影响。
但是,我将这个nfarp_in.pf = NF_ARP 换成 nfarp_in.pf = NFPROTO_ARP 后,会进入到hook_arp_in,但是判断sb的时候,始终为空,进入不到function( )里。
我的内核版本是3.2.6。希望各位帮忙分析下

论坛徽章:
0
2 [报告]
发表于 2013-10-09 07:30 |只看该作者
没人?自己顶顶。感觉这东西就是标准的,按照格式来就不会出错。但是真的没有hook到数据包。是不是跟内核的相关设置有关?

论坛徽章:
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
3 [报告]
发表于 2013-10-09 09:17 |只看该作者
回复 1# FlankerSky
  1.              unsigned int hook_arp_in(unsigned int hooknum,
  2.                                                 struct sk_buff **sb,
  3.                                                 const struct net_device *in,
  4.                                                 const struct net_device *out,
  5.                                                 int (*okfn)(struct sk_buff *))
复制代码
看下这个 hook 接口的 skb 参数类型用的是否正确。


   

论坛徽章:
0
4 [报告]
发表于 2013-10-09 09:32 |只看该作者
具体还是得看一下内核是如何处理arp的,看源码吧。

论坛徽章:
0
5 [报告]
发表于 2013-10-09 09:55 |只看该作者
回复 3# Godbach


谢谢版主提醒,代码是参考网上的,hook_arp_in()有个参数struct sk_buff **skb,改为struct sk_buff *skb(参考内核里的相关代码)后,真的好使了,能hook到arp的数据包了,但是还是不知道为什么?双指针不是一样吗?

论坛徽章:
0
6 [报告]
发表于 2013-10-09 09:56 |只看该作者
回复 4# 混沌老仙

谢谢,参考了内核的相关代码,改了一下函数的参数形式 ,可以hook到arp了。

   

论坛徽章:
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
7 [报告]
发表于 2013-10-09 10:12 |只看该作者
回复 5# FlankerSky

参数类型都不一样,怎么能保证好使呢。从 C 语言的角度上看,你多了一级解引用

   

论坛徽章:
0
8 [报告]
发表于 2013-10-09 10:45 |只看该作者
回复 7# Godbach

嗯,谢谢斑竹,明白了。刚才也看了下2.6.0的内核源码,确实,hook函数的接口发生变化了,所以才导致的上述错误。

论坛徽章:
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
9 [报告]
发表于 2013-10-09 11:35 |只看该作者
回复 8# FlankerSky
论坛里有多个帖子基本上都是像 LZ 这样的问题,原因也一样。

内核接口不是稳定了,不同版本之间都有可能变化。因此,使用一些实例代码的时候,千万要看清楚人家的内核版本,以及自己的内核版本,并比较一些重要接口是否发生了变化。


   

论坛徽章:
0
10 [报告]
发表于 2013-10-09 12:15 |只看该作者
回复 9# Godbach


  恩恩,,学习了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP