c - 如何获取ipv6地址的Mac地址?

标签 c ipv6

嗨,我编写了一个在 IPv6 地址上运行的 TCP 服务器。服务器的作用是接受来自同一子网中不同机器的客户端连接,并根据客户端的 MAC 地址对客户端进行分类。

例如: 客户端A和B来自同一台机器,客户端C来自另一台机器。当客户端A、B和C连接到服务器时,服务器显示客户端A和B来自同一台机器,而客户端C来自另一台机器。

要实现此目的,我必须从客户端 ipv6 地址获取 MAC 地址。

在 ipv4 地址中,我可以使用以下方法实现此目的 ioctl(mac_arp_sock, SIOCGARP, &areq);

由于 ARP 在 IPv6 中不起作用,仅通过知道对等 IPv6 地址来检索对等计算机的 MAC 地址的最佳方法是什么?

最佳答案

正如其名称所示,SIOCG ARP 使用 Address Resolution Protocol仅限 IPv4。就像维基页面提到的那样:邻居发现协议(protocol)是它的继承者。

因此,以前您可以将 ioctl 与 SIOCGARP 或使用相同后端的“arp -a”一起使用。现在你必须启动一个子进程/任务“ndp -na”并解析它的标准输出,如下所示:

Neighbor                        Linklayer Address  Netif Expire    St Flgs Prbs
fd00::xxxx:b1ff:xxxx:fc25       b8:xx:b1:xx:fc:xx    en0 permanent R  R   
xxxx::ca2a:xxxx:fe56:xxxx%en0   xx:2a:xx:56:xx:cc    en0 23h17m41s S      
fe80::xxxx:14ff:xxxx:ca52%en0   c8:xx:14:xx:ca:xx    en0 23h17m40s S    

参见引用:http://www.freebsd.org/cgi/man.cgi?format=html&query=ndp(8)

高级:Google 实现 ndp,例如BSD/OpenBSD/src/usr.sbin/ndp/ndp.c 如果您想自己实现而不使用 ndp-命令。

关于c - 如何获取ipv6地址的Mac地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25738279/

相关文章:

c - 用户空间中的物理内存管理?

javascript - ajax 请求的 IPV6 问题

c++ - 减去两个 IPv6 地址得到错误的值

go - 在golang中本地发送UDPv6

java - IPV6 地址在 Java 中转换为压缩形式

c# - Xamarin iOS(WebClient IPv6 拒绝)

c - 我应该如何使用 libpng 库将 RGBA 位图转换为 PNG 并将 PNG 转换回 RGBA 位图

iphone - 即时创建 *.docx(也许还有 *.doc?)文档?

c - longjmp(buffer, 0) 不返回 0

c struct pointer Seg.fault when malloc()