Как получить удаленный 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.