Chinaunix
标题:
NF_INET_POST_ROUTING处如何获取目的mac
[打印本页]
作者:
泽畔无材
时间:
2014-05-13 10:14
标题:
NF_INET_POST_ROUTING处如何获取目的mac
本帖最后由 泽畔无材 于 2014-05-13 15:58 编辑
在玩netfilter时遇到的一个问题,我本机是一个网关, 我的hook点在NF_INET_POST_ROUTING,而dnat是在NF_IP_PRE_ROUTING就处理了的。
在我的hook里检查发往内网的包,发现dst ip的确已经被改正了,但是mac仍然是网关的mac,想问下数据包的mac是何时被改正为内网机子的mac呢?在这个hook里能否获取到
真正的目标的mac
?
作者:
potato916305
时间:
2014-05-13 13:06
mac_header = skb->mac_header.........
就会这点..
作者:
泽畔无材
时间:
2014-05-13 13:53
回复
2#
potato916305
直接这么看已经在帖中说过了,看到的是网关的mac,并不是最后真正的目标PC的mac。
在NF_INET_POST_ROUTING处貌似还没有将正确的mac拷到skb里。
作者:
szlzzyli
时间:
2014-05-13 15:15
在网关做路由转发的时候才会由网关加入你要的目的MAC地址吧···
作者:
泽畔无材
时间:
2014-05-13 15:57
回复
4#
szlzzyli
对的,我的机子就是网关,可能帖子里没说清楚。
作者:
泽畔无材
时间:
2014-05-20 17:16
今天抽空查了下,使用neigh_lookup查找arp表就可以获取到ip对应的mac了~
作者:
guanglongxishui
时间:
2014-05-20 22:57
DNAT后,在NF_INET_POST_ROUTING这个hook点上是不能得到内网的MAC地址的。
int ip_output(struct sk_buff *skb)
{
return NF_HOOK_COND(
PF_INET, NF_INET_POST_ROUTING
, skb, NULL, dev,
ip_finish_output
,
!(IPCB(skb)->flags & IPSKB_REROUTED));
}
报文目的mac在被换成内网mac是在ip_finish_output函数完成的,该函数是在你hook函数被执行后执行的。
根据路由后得到的下一跳ip地址,从arp表里查到相应的MAC地址,替换skb的目的MAC发送出去。
作者:
liudeyi545
时间:
2014-12-30 20:20
您好,请问您的问题解决了吗?我与到了一个和您相似的问题,我想获取本机发出去的ARP包的n原MAC地址,可是也不成功,不知道怎么办呢?可以麻烦您帮我看一下吗?谢谢了!我的求助帖地址:
http://bbs.chinaunix.net/thread-4165048-1-1.html
谢谢您了
作者:
ken1980
时间:
2015-07-03 17:09
在IP发送流程后会调用hh_output,通过邻居子系统获取
作者:
nu_teller
时间:
2015-07-05 22:25
bingo
回复
6#
泽畔无材
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2