【问题标题】:How to get Mac address of ipv6 address?如何获取ipv6地址的Mac地址?
【发布时间】:2014-09-09 06:50:46
【问题描述】:

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

【问题讨论】:

    标签: c ipv6


    【解决方案1】:

    顾名思义,SIOCG ARP 使用仅限 IPv4 的 Address Resolution 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-command。

    【讨论】:

    【解决方案2】:

    使用命令:

    ip neigh
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-21
      • 2014-07-24
      • 1970-01-01
      相关资源
      最近更新 更多