![如何在 Linux 上完美地进行邻居发现请求?](https://linux22.com/image/758293/%E5%A6%82%E4%BD%95%E5%9C%A8%20Linux%20%E4%B8%8A%E5%AE%8C%E7%BE%8E%E5%9C%B0%E8%BF%9B%E8%A1%8C%E9%82%BB%E5%B1%85%E5%8F%91%E7%8E%B0%E8%AF%B7%E6%B1%82%EF%BC%9F.png)
我正在寻找一种方法来检索 LAN 网络上特定主机的 MAC 地址。我知道它的 IPv6 地址。理想情况下,我希望有一种方法可以触发 Linux 内核为我执行邻居请求,然后我可以通过命令检索主机 MAC 地址ip -6 neighbour
目前,我发现触发邻居请求的唯一方法是尝试在随机端口上与主机建立 TCP 连接。但我发现这个解决方案并不好:
curl --connect-timeout 1 "http://[fe80::1234%eth0]:12345"
答案1
由于您要求这反映在内核的邻居中,并且您不愿意安装软件,请尝试 ICMP echo:
ping -c 1 fe80::1234%eth0
实际上,您尝试什么协议并不重要,只要它是基于 IP 的。
如果您愿意安装软件,nmap 具有发现功能。以下是仅 NDP 扫描,输出到包含链路层地址的 XML 文件(和 stdout):
nmap -sn -PR -oX /tmp/lladdr.xml -6 fe80::1234%eth0
显然,这种类型的 nmap 扫描会促使内核进行邻居发现,因为在测试中我看到它重新出现在 下ip neigh
。
答案2
ndisc6-1 fe80::1234 eth0
eth0
当然,用正确的接口名称替换。