如何以编程方式在iOS中通过IPv6获取远程MAC地址

Max*_*lov 22 network-programming mac-address ipv6 ios tvos

我需要找到一个解决方案,如何从WiFi网络中的其他设备获取MAC地址.有一个很好的方法如何为IPv4执行此操作(iOS应用程序如何获取MAC地址?),但如何为IPv6执行此操作?由于ARP被NDP(邻居发现协议)取代,后一种方法不起作用.如果有人能帮助我,我将不胜感激.

Ton*_*ony 5

层和封装

网络架构是分层的,上层封装了下层的不同实现,提供了相对于下层更高的抽象。使用IP的网络层封装了不同的链路层协议,如以太网、WiFi、PPP(可能运行在不使用MAC地址的串行电缆上)等。

  • 所以,第一个问题是你的意思是什么remote

如果您的意思是 WAN 中的其他主机,则除非两个设备都实现特定协议,否则这是不可能的:您向这些设备发送请求,它们回复他的 mac 地址。

如果您指的是同一局域网中的其他主机,则可以在 IPv4 中使用 ARP 协议,在 IPv6 中使用 NDP(其中)。

阿尔普与新民主党

ARP 在局域网中发送广播,当它知道主机的 IP 地址但不知道 MAC 地址时,然后找到有人呼叫的主机回复其 MAC 地址。

NDP 提供两个主要功能部分,第一部分与 ARP 相同:网络层地址和链路层地址之间的映射。(不同之处在于NDP使用多播地址:前缀f02::1:f/104,结合请求的IPv6地址的低24位)

所以你需要的是发送ICMPv6 Neighbor Solicitation消息。

IPv6 中的地址分配

链路本地 IPv6 地址(和一些全局 IPv6 地址)使用接口标识符 (IID) 作为单播 IPv6 地址分配的基础。... IID 通常为 64 位长,并且直接从使用修改后的 EUI-64 格式的网络接口的底层链路层 MAC 地址形成。或者通过另一个随机化值的过程,以期为地址跟踪提供一定程度的隐私。

因此,在最常见的情况下,您可以直接从设备的 IPv6 链路本地地址获取设备的 MAC 地址。

结论:

  • 在两个设备中实现您的协议
  • 如果请求节点在同一 LAN 中,则向请求节点发送 NDP 消息
  • 从链路本地 IPv6 地址中提取 MAC 地址

参考

  • 维基百科
  • TCP/IP 图解,第 1 卷