2013-03-04 141 views
0

我正在编写一个内核模块,并且需要对于给定的IP来验证该IP的内核的ARP缓存中是否存在ARP条目。如果存在,我需要从这个ARP条目中获取MAC地址。从ARP条目(Linux内核)获取给定IP的MAC地址

我在这一点上试图了解arp_find函数usr/src/linux-version/net/ipv4/arp.c,但我不完全明白它......有人请发表一个例子,我该如何完成这项任务或指导我的东西,可以帮助我出来吗?我将不胜感激!

编辑:我的IP地址被存储为struct in_addr

编辑#2:我发现我的答案 - 为那些谁拥有这个问题,检查功能neigh_lookupnet/core/neighbour.cpkey参数只是指向您的IPv4地址(struct in_addr)的指针。

+0

嗨,我想问问你是否成功实现了你的目标?我正在编写内核模块,它以特殊方式处理TCP数据包,然后假设将它们发送到目的地。但似乎我无法获得下一跳的MAC地址。我已经有了它的IP地址,但任何请求到接触mac地址的rtable结构的内核恐慌结束...... – AlexKey 2014-02-28 09:26:05

+0

@AlexKey:你尝试了我在“编辑#2”中描述的内容吗? – pap42 2014-03-18 09:14:18

回答

0

我认为在Linux内核中,ARP缓存只存储邻居的mac地址。您可以使用arp_ioctl()或遵循arp_ioctl()方法来实现您的任务。 arp_ioctl()做了两件大事:(1)找到net_device; (2)ARP查询;