2013-09-19 5 views
17

Я заметил, что некоторые из лучших приложений для обнаружения сети, таких как 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 (host­names) are per­formed as unicast and mul­ti­cast queries for every IP found. - http://www.bananaglue.de/inet/index_e.php

+0

Я предполагаю, что вы ищете решение bash, не так ли? Я попытался бы найти любые службы с помощью dns-sd tool из bonjour и выследить отправленный запрос с помощью wirehark. После этого я попытаюсь восстановить запрос с помощью bash-tools. Команды для тестирования: 'dns-sd -B _smb._tcp' и' dns-sd -B _afpovertcp._tcp'. Примечание. Не используйте инструмент dns-sd непосредственно в вашем сценарии bash. – Yser

+0

@John Wright У вас есть код, на котором вы искали то, что искали? Я тоже хочу разрешить имя хоста. Я попытался использовать вызов «gethostbyaddr» POSIX, но он возвращает нуль. Я задал вопрос [здесь] (https://stackoverflow.com/questions/29545847/cfhoststartinforesolution-fails-get-device-name-from-ip-address-on-lan). Может ли помочь? –

ответ

6

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

Если вы наберете 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 в своем скрипте. Вместо этого вы должны использовать определенную реализацию протокола для вашего языка программирования.

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

Надежда, что помогает.