免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: meijusan123
打印 上一主题 下一主题

hook中修改ip值,是否同时会发送了arp? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2009-08-29 22:28 |只看该作者

回复 #9 Godbach 的帖子

Godbach 大哥的意思,是不是,在我修改了dst的ip后,自己手动发送arp包去请求request,之后等待reply后,把ip和mac映射表添加到路由cache中,再继续重新一个路由?

论坛徽章:
0
12 [报告]
发表于 2009-08-29 22:31 |只看该作者

回复 #6 kevert 的帖子

你说的也对,但这是一般数据包发送的流程会这样。但现在,我在ip层对dst的ip地址修改过后,经过测试表明,他找不到ip和mac的对应表,但也没去重新自动解析。所以,我就纳闷啦,难道,还需要自己去发arp包去手动解析?

论坛徽章:
0
13 [报告]
发表于 2009-08-29 22:34 |只看该作者
原帖由 wtll 于 2009-8-28 17:26 发表
得把当前skb的dst mac 制成0xffffffff 才会重新解析吧




wtll 兄弟,所说的要“制成0xffffffff ”到底是啥意思呢?不太明白哦,是不是ip修改过,要让他继续能够找到ip和mac的对应关系,这样做,就能实现?

论坛徽章:
0
14 [报告]
发表于 2009-08-29 23:54 |只看该作者

回复 #12 meijusan123 的帖子

好像是不会记录mac的吧,只记录IP

论坛徽章:
0
15 [报告]
发表于 2009-08-30 09:12 |只看该作者

回复 #12 meijusan123 的帖子

你可能是在找完路由之后然后才修改报文的目的地址的,因此才可能导致不会发ARP。
你可以将修改之后的报文让其重新走一下路由,我觉得这样会比较好点。因为如果你只是纯粹请求ARP的话,那么如果修改之后的目的地址与你中间还隔着其他设备,比如路由器之类的话,那么你的ARP请求可能会导致失败。

论坛徽章:
0
16 [报告]
发表于 2009-08-30 14:45 |只看该作者

回复 #13 meijusan123 的帖子

以太网中arp是不能跨越网段的,只能通过广播解析出最近的nexthop 的MAC,然后再通过定向组播方式传送,而处于ip层的NF_HOOK中应该不用管mac的信息其后会通过系统的ip_forward 或ip_output中的流程加上,你可以试试用下面的代码打出mac看看.


------------------------------
2.4 kernel

   printk(KERN_INFO "%2X-%2X-%2X-%2X-%2X-%2X ==> %2X-%2X-%2X-%2X-%2X-%2X \n",
        skb->mac.ethernet->h_source[0],
        skb->mac.ethernet->h_source[1],
         skb->mac.ethernet->h_source[2],
        skb->mac.ethernet->h_source[3],
         skb->mac.ethernet->h_source[4],
        skb->mac.ethernet->h_source[5],
        skb->mac.ethernet->h_dest[0],
        skb->mac.ethernet->h_dest[1],
         skb->mac.ethernet->h_dest[2],
        skb->mac.ethernet->h_dest[3],
         skb->mac.ethernet->h_dest[4],
        skb->mac.ethernet->h_dest[5]

[ 本帖最后由 wtll 于 2009-8-30 14:48 编辑 ]

论坛徽章:
0
17 [报告]
发表于 2009-08-30 21:38 |只看该作者

回复 #16 wtll 的帖子

如果按我现在的情况 打印出来的mac地址 ,就是之前说的这种没变的地址。是有问题存在

论坛徽章:
0
18 [报告]
发表于 2009-08-30 21:45 |只看该作者
原帖由 kevert 于 2009-8-30 09:12 发表
你可能是在找完路由之后然后才修改报文的目的地址的,因此才可能导致不会发ARP。
你可以将修改之后的报文让其重新走一下路由,我觉得这样会比较好点。因为如果你只是纯粹请求ARP的话,那么如果修改之后的目的地 ...



kevert 兄弟说了还挺有道理的。
可能,是在修改过ip后,必须要重新路由一次才行,这样接下去的2L会去激发arp动作去寻找ip和mac的映射关系。

现在我发送数据包,在NF_IP_LOCAL_OUT处的hook修改了目的ip,按道理来说,是在route之前多的修改,在之后才经历了L3的route,但是,还是没有找到新的ip和mac的映射关系。奇诡的很哦?

论坛徽章:
0
19 [报告]
发表于 2009-08-31 08:43 |只看该作者

回复 #18 meijusan123 的帖子

不奇怪,你看看 ip_queue_xmit() 就知道了。
在 LOCAL_OUT 之前已经找过路由了,因为发送报文之前,先找路由,如果找不到路由,那么说明对应的报文没有路由就无法出去,这可能也算是一个优化吧。
不过我倒觉得相对来说,应该做完DNAT之后应该再找一次路由这样比较好吧。现在暂时还没有想清楚知道为什么netfilter不这么做。哪位大侠给点建议吧。

论坛徽章:
0
20 [报告]
发表于 2009-08-31 17:09 |只看该作者

回复 #19 kevert 的帖子

按道理说 NF_IP_LOCAL_OUT 和NF_IP_POST_ROUTING两个hook之间会进行路由的,但为什么在LOCAL_OUT 之前已经找过路由了,感觉意外呀!

这样说来,让我的hook在NF_IP_POST_ROUTING点上,自己修改了些ip地址,怎么自己去重新路由呢? 给点建议。感觉好难哦。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP