Я замечаю, что некоторые из лучших приложений для сетевого обнаружения, таких как Fing для iOS и iNet для Mac, могут обнаружить имя устройства устройств iOS и устройств Mac, даже если они не рекламируют сервисы Bonjour, такие как iTunes Wi-Fi Sync. Как это делается? Я знаю, как выполнить обратный запрос mDNS https://serverfault.com/info/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 ответов.
Также обратите внимание, что у меня есть 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