从ARP条目(Linux内核)获取给定IP的MAC地址
问题描述:
我正在编写一个内核模块,并且需要对于给定的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_lookup
上net/core/neighbour.c
。 pkey
参数只是指向您的IPv4地址(struct in_addr
)的指针。
答
我认为在Linux内核中,ARP缓存只存储邻居的mac地址。您可以使用arp_ioctl()或遵循arp_ioctl()方法来实现您的任务。 arp_ioctl()做了两件大事:(1)找到net_device; (2)ARP查询;
嗨,我想问问你是否成功实现了你的目标?我正在编写内核模块,它以特殊方式处理TCP数据包,然后假设将它们发送到目的地。但似乎我无法获得下一跳的MAC地址。我已经有了它的IP地址,但任何请求到接触mac地址的rtable结构的内核恐慌结束...... – AlexKey 2014-02-28 09:26:05
@AlexKey:你尝试了我在“编辑#2”中描述的内容吗? – pap42 2014-03-18 09:14:18