Я заметил, что некоторые из лучших приложений для обнаружения сети, таких как 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 Sync или какой-либо другой сервис Bonjour на iOS. Я не уверен, как получить имя в противном случае, но эти приложения надежно получить его. Я использовал Wireshark, пока iNet открывал, и я вижу только запросы ICMP и NetBios, которые возвращают 0 ответов.узнайте имя устройства iOS, используя mDNS
Также обратите внимание, что у меня есть IP-адрес устройства, выполнив широковещательный пинг, а затем разобрав таблицу ARP. Я хочу узнать, какие из устройств, обнаруженных таким образом, являются устройствами iOS, получив имя своего устройства и ищет строку «iPhone» или «iPad».
Также обратите внимание, что веб-сайт приложения iNet предоставляет следующие сведения о том, как они выполняют обратный поиск IP-адресов. Я полагаю, это означает, что они выполняют обратный поиск DNS и обратный поиск mDNS для каждого IP-адреса.
Reverse IP lookups (hostnames) are performed as unicast and multicast queries for every IP found.
- http://www.bananaglue.de/inet/index_e.php
Я предполагаю, что вы ищете решение bash, не так ли? Я попытался бы найти любые службы с помощью dns-sd tool из bonjour и выследить отправленный запрос с помощью wirehark. После этого я попытаюсь восстановить запрос с помощью bash-tools. Команды для тестирования: 'dns-sd -B _smb._tcp' и' dns-sd -B _afpovertcp._tcp'. Примечание. Не используйте инструмент dns-sd непосредственно в вашем сценарии bash. – Yser
@John Wright У вас есть код, на котором вы искали то, что искали? Я тоже хочу разрешить имя хоста. Я попытался использовать вызов «gethostbyaddr» POSIX, но он возвращает нуль. Я задал вопрос [здесь] (https://stackoverflow.com/questions/29545847/cfhoststartinforesolution-fails-get-device-name-from-ip-address-on-lan). Может ли помочь? –