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

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

2 ответа

Решение

Слой и инкапсуляция

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

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

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

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

Арп и НДП

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

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

Итак, вам нужно отправить сообщение ICMPv6 Neighbor Solicitation.

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

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

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

Заключение:

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

ссылка

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

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

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

Другие вопросы по тегам