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



嗨,我写了一个运行在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地址的最佳方法是什么?

顾名思义,SIOCGARP使用仅IPv4的地址解析协议。就像维基页面提到的:邻居发现协议是它的继任者。

因此,以前您可以将ioctl与SIOCGARP或使用相同后端的"arp-a"一起使用。现在,您必须启动一个子流程/任务"ndp-na",并解析其stdout,它看起来像:

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)

高级:谷歌用于ndp的实现,例如BSD/OpenBSD/src/usr/sbin/ndp/ndp.c,如果你想在不使用ndp命令的情况下自行实现它。

使用命令:

ip neigh

它将显示IPv4和IPv6 的IP/MAC地址映射

最新更新