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

У меня есть список 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. Так что просмотр сервисов не сработает.

4 ответа

Решение

Поскольку вы уже знаете 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.

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

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

getent hosts 192.168.0.52

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

avahi-resolve-address 192.168.0.52

Это похоже на работу:

dig -x 192.0.2.42 -p 5353 @224.0.0.251

Из Fun с многоадресным DNS

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

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

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

Другие вопросы по тегам