我需要找到一种方法来获取WiFi网络中其他设备的MAC地址。有一种很好的方法可以用于IPv4(iOS应用程序Fing如何获取MAC地址?),但是如何在IPv6中实现呢?由于ARP被邻居发现协议(NDP)所取代,后一种方法不起作用。如果有人能够帮助我,我将非常感激。
我需要找到一种方法来获取WiFi网络中其他设备的MAC地址。有一种很好的方法可以用于IPv4(iOS应用程序Fing如何获取MAC地址?),但是如何在IPv6中实现呢?由于ARP被邻居发现协议(NDP)所取代,后一种方法不起作用。如果有人能够帮助我,我将非常感激。
网络架构是分层的,上层包含了下层不同实现的封装并提供比下层更高的抽象。网络层使用 IP 封装不同的链路层协议,如以太网、WiFi、PPP(可能在不使用 MAC 地址的串行电缆上运行)等。
remote
是什么意思?如果你指的是广域网中的其他主机,除非两个设备都实现了一个特定的协议,否则这是不可能的:你发送一个请求到这些设备,他们回复他的 MAC 地址。
如果你指的是同一局域网中的其他主机,则可以在 IPv4 中使用 ARP 协议,在 IPv6 中使用 NDP()。
当 ARP 知道主机的 IP 地址而不知道 MAC 地址时,它会在本地网络中发送广播,然后那些发现有人呼唤它的主机会回复它的 MAC 地址。
NDP 提供了两个主要的功能部分,第一个与 ARP 相同:在网络和链路层地址之间建立映射。(不同之处在于 NDP 使用多播地址:前缀 f02::1:f/104,结合所请求的 IPv6 地址的低 24 位)
因此,你需要发送 ICMPv6 邻居探测消息。
链路本地 IPv6 地址(以及一些全局 IPv6 地址)使用接口标识符(IIDs)作为单播 IPv6 地址分配的基础。... IIDs 通常为 64 位,并使用修改过的 EUI-64 格式直接从网络接口的底层链路层 MAC 地址形成,或通过另一个随机化该值的进程来提供某种程度的防止地址跟踪的隐私。
因此,在大多数常见情况下,你可以直接从他们的 IPv6 链路本地地址中获取设备的 MAC 地址。