免费注册 查看新帖 |

Chinaunix

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

[网络子系统] 求助netfilter钩子函数的问题,请各位帮帮忙,给些意见!谢谢各位! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-10-08 22:54 |只看该作者 |倒序浏览
本帖最后由 Tinnal 于 2014-10-09 23:27 编辑

    我有一台服务器有四块网卡,我需要在服务器中insmod一个模块,这个模块用来钩住各个网口的ipv6数据包,钩子点为PRE_ROUTING,具体要求如下:
           eth1的数据包钩住后,修改目地mac地址,然后从eth3发送出去;
           eth2的数据包钩住后,修改目的mac地址,然后从eth3发送出去;
    现在的问题是网口eth1、网口eth2的数据包能钩住,并且能正确修改mac,修改后也能从eth3转出去,但eth3始终不能钩住进入的数据包,(注:流过eth3的数据包目地mac地址不是eth3的,也不是广播所使用的mac),各个网口我都设置成了混杂模式,请问各位有没有什么好的意见?谢谢了!!

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
2 [报告]
发表于 2014-10-09 08:23 |只看该作者
你用tcpdump能从eth3捉到包吗?

论坛徽章:
0
3 [报告]
发表于 2014-10-09 09:12 |只看该作者
回复 2# Tinnal


    从eth3也能捕到eth1和eth2发过去的包,在eth3外面直连了一台主机,eth1和eth2的数据包从eth3发出去后直接到了这台主机上,这台主机再将源和目的mac交换,重新发到eth3上(所以到达eth3的数据包目地mac不是eth3的),重新发到eth3上的包也能用tcpdump看到,但就是没法钩住!这是在钩住IPv6数据包时,eth3无效,但同样的方法,我在钩取IPv4数据包时,却是好使的。

论坛徽章:
0
4 [报告]
发表于 2014-10-09 21:00 |只看该作者

netfilter怎么钩取多块网卡的数据包?


   服务器有四块网卡,怎么设置钩子函数,将流过四个网口的IPv6数据包全部钩住!请大侠们给点意见吧!

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
5 [报告]
发表于 2014-10-09 22:48 |只看该作者
是否因为MAC不对,IPV6把他扔了,而还没有到PRE_ROUTING这个阶段。

论坛徽章:
9
辰龙
日期:2014-08-18 20:38:42未羊
日期:2014-09-04 08:50:45丑牛
日期:2014-09-06 00:12:55寅虎
日期:2014-12-22 20:50:56摩羯座
日期:2015-01-14 22:28:15巳蛇
日期:2015-01-23 20:39:272015年辞旧岁徽章
日期:2015-03-03 16:54:1515-16赛季CBA联赛之青岛
日期:2016-03-13 23:37:1915-16赛季CBA联赛之深圳
日期:2016-03-29 18:52:38
6 [报告]
发表于 2014-10-09 23:13 |只看该作者
回复 4# contestjia

给你查到了。从PRE_ROUTING的定义点,我们可以看出,混杂模式收到包都已经被扔了。
  1. /* IP Hooks */
  2. /* After promisc drops, checksum checks. */
  3. #define NF_IP_PRE_ROUTING        0
  4. /* If the packet is destined for this box. */
  5. #define NF_IP_LOCAL_IN                1
  6. /* If the packet is destined for another interface. */
  7. #define NF_IP_FORWARD                2
  8. /* Packets coming from a local process. */
  9. #define NF_IP_LOCAL_OUT                3
  10. /* Packets about to hit the wire. */
  11. #define NF_IP_POST_ROUTING        4
  12. #define NF_IP_NUMHOOKS                5
复制代码
  1. int ip_rcv(struct sk_buff *skb, struct net_device *dev, struct packet_type *pt, struct net_device *orig_dev)
  2. {
  3.         struct iphdr *iph;
  4.         u32 len;

  5.         if (dev->nd_net != &init_net)
  6.                 goto drop;

  7.         /* When the interface is in promisc. mode, drop all the crap
  8.          * that it receives, do not try to analyse it.
  9.          */
  10.         if (skb->pkt_type == PACKET_OTHERHOST)
  11.                 goto drop;

  12. 。。。。。。

  13.         /* Remove any debris in the socket control block */
  14.         memset(IPCB(skb), 0, sizeof(struct inet_skb_parm));

  15.         return NF_HOOK(PF_INET, NF_IP_PRE_ROUTING, skb, dev, NULL,
  16.                        ip_rcv_finish);

  17. inhdr_error:
  18.         IP_INC_STATS_BH(IPSTATS_MIB_INHDRERRORS);
  19. drop:
  20.         kfree_skb(skb);
  21. out:
  22.         return NET_RX_DROP;

复制代码
以上代码的内核版本为2.6.34.10


   

论坛徽章:
0
7 [报告]
发表于 2014-10-10 10:58 |只看该作者
回复 6# Tinnal


    谢谢,的确是这个原因,我比较了内核ipv4和ipv6的进入部分代码,发现v4的那一部分的确被人注释了,难怪好使!V6那部分没有注释,所以没有包来,额,再问个很白的问题,求大侠轻喷,我没做过内核编译,现在做这个只是临时需要,
   请问,如果我要注释掉那一行v6的代码,怎么使整个系统生效啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP