Как я могу получить имя машины с IP через Multicast DNS?

17

У меня есть список IP-адресов в сети, и большинство из них поддерживают многоадресный DNS. Я хотел бы иметь возможность разрешать имя сервера, а не просто иметь IP-адрес.

ping computer.local
64 bytes from 192.168.0.52: icmp_seq=1 ttl=64 time=5.510 ms
64 bytes from 192.168.0.52: icmp_seq=2 ttl=64 time=5.396 ms
64 bytes from 192.168.0.52: icmp_seq=3 ttl=64 time=5.273 ms

Работает, но я хотел бы иметь возможность определить это имя по IP. Также устройства не обязательно транслируют какие-либо сервисы, но определенно поддерживают трансляцию mDNS. Так что просмотр сервисов не сработает.

Адам
источник
1
Какую ОС вы используете? mdns-scan, кажется, вариант на Linux.
Зоредаче
1
OS X, но если я смогу получить решение для Linux, я уверен, что смогу найти аналог в мире Mac. mdns-scan ищет вещательные сервисы, так что это не сработает. Некоторые из устройств не транслируют какие-либо сервисы, но разрешают их адрес при запросе по имени.
Адам

Ответы:

23

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

$ dig -x 10.0.0.200 @224.0.0.251 -p 5353

; <<>> DiG 9.6.0-APPLE-P2 <<>> -x 10.0.0.200 @224.0.0.251 -p 5353
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54300
;; flags: qr aa; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; QUESTION SECTION:
;200.0.0.10.in-addr.arpa.   IN  PTR

;; ANSWER SECTION:
200.0.0.10.in-addr.arpa. 10 IN  PTR atj-mbp.local.

;; ADDITIONAL SECTION:
atj-mbp._device-info._tcp.local. 10 IN  TXT "model=MacBookPro3,1"

;; Query time: 2 msec
;; SERVER: 10.0.0.200#5353(224.0.0.251)
;; WHEN: Sat Jun 26 07:53:44 2010
;; MSG SIZE  rcvd: 126

Для более дружественного вывода сценария оболочки используйте '+ short':

$ dig +short -x 10.0.0.200 @224.0.0.251 -p 5353
atj-mbp.local.

В зависимости от предполагаемого варианта использования может быть более подходящий метод выполнения запроса. Не стесняйтесь связаться со мной, если вам нужна дополнительная информация.

andrewtj
источник
2
Любая идея, почему это может не сработать на устройстве iOS, на котором не запущены какие-либо службы Bonjour? Он работает против Mac, на котором не запущены никакие службы Bonjour.
Джон Райт
Стоит отметить, что вы также можете узнать, какие IP-адреса в сети, используя arp-scanустановленные из homebrew или macports. Или, если вы просто хотите , чтобы получить чувство для хостов в сети, вы можете смотреть на текущую таблицу ARP с помощью команды уже на OS X: arp. В частности, вы можете использовать команду arp -n -i <interface> -l -a, где <interface>должно быть имя сетевого интерфейса, который вам интересен (например, en0).
Парфянский выстрел
5

В Linux вы можете использовать команду getent из libc:

getent hosts 192.168.0.52

Или установите avahi-utils и запустите

avahi-resolve-address 192.168.0.52
Tobu
источник
Пакет находится avahi-toolsна Fedora, и это единственное, что сработало на этой странице :)
Navin
-1

Что ж, я немного больше изучил этот вопрос, и, просматривая mDNDS и протокол, похоже, что это на самом деле невозможно. В протоколе для поиска имени есть запрос поиска, поэтому, когда вы запрашиваете имя, соответствующий клиент ответит, но нет запроса поиска для IP. Там нет центрального магазина для адресов либо.

Надеюсь, что это поможет кому-то еще, так как я потратил слишком много времени, чтобы выследить это.

Если у кого-то есть какие-то идеи по этому вопросу, я бы очень хотел их услышать.

Адам
источник