Как я могу получить имя машины с 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
Что ж, я немного больше изучил этот вопрос, и, просматривая mDNDS и протокол, похоже, что это на самом деле невозможно. В протоколе для поиска имени есть запрос поиска, поэтому, когда вы запрашиваете имя, соответствующий клиент ответит, но нет запроса поиска для IP. Там нет центрального магазина для адресов либо.
Надеюсь, что это поможет кому-то еще, так как я потратил слишком много времени, чтобы выследить это.
Если у кого-то есть какие-то идеи по этому вопросу, я бы очень хотел их услышать.