Как получить удаленный MAC-адрес через IPv6 в iOS программно

Мне нужно найти решение, как получить MAC-адрес с другого устройства в сети WiFi. Существует хороший метод, как это сделать для IPv4 (как приложение iOS Fing получает MAC-адрес?), но как это сделать для IPv6? Поскольку ARP был заменен NDP (Neighbour Discovery Protocol), последний метод не работает. Я был бы очень признателен, если бы кто-нибудь мог мне помочь.

2 ответов


слой и заключения

сетевая архитектура многослойна, верхний слой инкапсулирует различные реализации нижнего слоя и обеспечивает более высокую абстракцию относительно нижнего слоя. Сетевой уровень, который использует IP, инкапсулирует различные протоколы уровней связи, такие как Ethernet, WiFi, PPP (которые могут работать на последовательном кабеле, который не использует MAC-адрес) и т. д.

  • Итак, первая проблема заключается в том, что вы подразумеваете под remote?

Если вы имею в виду другие хосты в WAN, это невозможно, если оба устройства не реализуют определенный протокол: вы отправляете запрос на эти устройства, они отвечают своим mac-адресом.

Если вы имеете в виду другой хост в той же локальной сети, вы можете использовать протокол ARP в IPv4 и NDP (который ) в IPv6.

Arp & NDP

ARP отправляет трансляцию в LAN, когда он знает IP-адрес хоста, но не MAC-адрес, тогда хосты, которые находят кого-то, звонят ему, отвечают на его MAC адрес.

NDP предоставляет две основные части функциональности, первая такая же с ARP: сопоставление между сетевыми и ссылочными адресами. (Разница заключается в том, что NDP использует многоадресный адрес: префикс f02:: 1: f/104 в сочетании с 24 битами низкого порядка запрошенного IPv6-адреса)

Итак, что вам нужно, это отправить ICMPv6 соседа приглашение сообщение.

назначение адреса в IPv6

Link-локальные IPv6-адреса (и некоторые глобальные IPv6 адреса) используйте идентификаторы интерфейса (IIDs) в качестве основы для одноадресного назначения IPv6-адресов. ... IID обычно имеют длину 64 бита и формируются либо непосредственно из MAC-адреса нижнего уровня сетевого интерфейса с использованием модифицированного формата EUI-64. или другой процесс, который рандомизирует значение в надежде обеспечить некоторую степень конфиденциальности против отслеживания адресов.

таким образом, в наиболее распространенных случаях вы можете получить MAC-адрес устройства непосредственно из их IPv6 ссылка локальный адрес.

вывод:

  • реализовать свой протокол на обоих устройствах
  • отправить сообщение NDP на запрашиваемый узел, если он находится в той же LAN
  • извлечь MAC-адрес из ссылки локальный IPv6-адрес

Ref

  • Википедия
  • TCP / IP иллюстрированный, том 1

Я использую MMLanScan для этой цели. Все очень просто, чтобы получить работу, чтобы найти IP/MAC-адреса устройств в локальной сети.

Я использую его некоторое время назад, но я думаю, что он также работает с IPv6.