узнать имя устройства iOS с помощью mDNS

Я заметил, что некоторые из лучших приложений для обнаружения сети, такие как Fing для iOS и iNet для Mac, могут обнаруживать имена устройств iOS и устройств Mac, даже если они не рекламируют службы Bonjour, такие как iTunes Wi-Fi Sync. Как это делается? Я знаю, как выполнить обратный запрос mDNS https://serverfault.com/questions/143184/how-do-i-get-the-machine-name-from-an-ip-via-multicast-dns. Но в то время как обратный поиск mDNS (по крайней мере, выполняемый с помощью команды dig dig -x the.ip @224.0.0.251 -p 5353) будет работать на Mac, который в противном случае не транслирует какие-либо службы Bonjour, он не работает, если не запущена синхронизация Wi-Fi или какая-либо другая служба Bonjour на компьютере. iOS-устройство. Я не уверен, как получить имя иначе, но эти приложения надежно его получают. Я использовал Wireshark во время обнаружения iNet и вижу только запросы ICMP и NetBios, которые возвращают 0 ответов.

Также обратите внимание, что я уже получил IP-адрес устройства, выполнив широковещательный пинг и затем проанализировав таблицу ARP. Я хочу узнать, какие из обнаруженных таким образом устройств являются устройствами iOS, получив имя их устройства и найдя строку «iPhone» или «iPad».

Также обратите внимание, что на веб-сайте приложения iNet приведено следующее о том, как они выполняют обратный поиск IP-адресов. Я понимаю, что это означает, что они выполняют обратный поиск DNS и обратный поиск mDNS для каждого IP-адреса.

Reverse IP lookups (host­names) are per­formed as unicast and mul­ti­cast queries for every IP found.http://www.bananaglue.de/inet/index_e.php


person John Wright    schedule 19.09.2013    source источник
comment
Я предполагаю, что вы ищете решение для bash, верно? Я бы попытался найти любые сервисы с помощью инструмента dns-sd от bonjour и отследить отправленный запрос с помощью wireshark. После этого я попытался бы восстановить запрос с помощью bash-tools. Команды для проверки: dns-sd -B _smb._tcp и dns-sd -B _afpovertcp._tcp. Примечание. Не используйте инструмент dns-sd непосредственно в сценарии bash.   -  person Yser    schedule 16.12.2014
comment
@John Wright У вас есть код, соответствующий тому, что вы искали? Я тоже хочу разрешить имя хоста. Я попытался использовать вызов gethostbyaddr POSIX, но он возвращает ноль. Я задал вопрос здесь.. Можешь помочь?   -  person dev    schedule 15.04.2015


Ответы (1)


Вы пробовали инструмент командной строки dns-sd?

Если вы наберете dns-sd -B _services._dns-sd._udp, чтобы получить все доступные службы, вы увидите, что доступна _whats-my-name служба.

$ dns-sd -B _services._dns-sd._udp
Browsing for _services._dns-sd._udp
DATE: ---Tue 16 Dec 2014---
14:38:30.746  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
14:38:30.747  Add        3   5 .                    _tcp.local.          _nfs
14:38:30.747  Add        3   5 .                    _tcp.local.          _afpovertcp
14:38:30.747  Add        3   5 .                    _tcp.local.          _smb
14:38:30.747  Add        2   0 .                    _tcp.local.          _whats-my-name
14:38:31.330  Add        3  10 .                    _tcp.local.          _nfs
14:38:31.330  Add        3  10 .                    _tcp.local.          _afpovertcp
14:38:31.330  Add        2  10 .                    _tcp.local.          _smb

после этого мы можем запросить эту службу, которая выводит следующее:

$ dns-sd -B _whats-my-name._tcp
Browsing for _whats-my-name._tcp
DATE: ---Tue 16 Dec 2014---
14:40:20.738  ...STARTING...
Timestamp     A/R    Flags  if Domain               Service Type         Instance Name
14:40:20.742  Add        2   0 local.               _whats-my-name._tcp. Blub MacBook Pro

Instance Name здесь самая интересная часть. Я предполагаю, что служба _whats-my-name доступна на каждом компьютере, где работает Bonjour. Возможно, вы сможете отследить отправленные запросы и восстановить их с помощью базовых инструментов bash, если вы не можете получить доступ к dns-sd в каждом случае. Более того, вы не должны использовать dns-sd в своем скрипте. Вместо этого вы должны использовать конкретную реализацию протокола для вашего языка программирования.

Примечание. Имейте в виду, что имя устройства может быть ненадежным для определения того, с каким устройством вы общаетесь.

Надеюсь, это поможет.

person Yser    schedule 16.12.2014
comment
«_whats-my-name» больше не публикуется устройствами macOS. - person AlBlue; 15.02.2021