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

时间:2014-09-09 06:50:46

标签: c ipv6

您好我写了一个在IPv6地址上运行的TCP服务器。服务器所做的是接受来自同一子网中各种机器的客户端连接,并根据客户端的mac地址对客户端进行分类。

对于Ex: 客户端A和B来自同一台计算机,而客户端C来自另一台计算机。当客户端A,B和C连接到服务器,然后服务器显示客户端A和B来自同一台机器而客户端C来自另一台机器。

要实现这一点,我必须从客户端ipv6地址获取mac地址。

在ipv4地址中,我可以使用     ioctl(mac_arp_sock,SIOCGARP,& areq);

由于ARP不能在IPv6中工作,只需知道对端IPv6地址,检索对等机器mac地址的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

就像名称所说的那样,SIOCG ARP 使用仅{IPv4}的Address Resolution Protocol。就像维基页面提到的那样:邻居发现协议是其继承者。

所以,以前你可以使用ioctl和SIOCGARP或者#34; 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)

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