Як отримати ім'я машини з 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.
— Zoredache

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

Для більш дружнього сценарію оболонки використовуйте "+ короткий":

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

Залежно від конкретного випадку використання, можливо, є більш відповідний метод виконання запиту. Якщо вам потрібна додаткова інформація, не соромтеся зв’язатися зі мною.


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

Пакет є avahi-toolsна Fedora, і це єдине, що працювало на цій сторінці :)
— Navin


-1

Ну, я провів трохи більше досліджень з цього питання, і, переглядаючи mDNDS та протокол, схоже, це насправді неможливо. У протоколі є запит на пошук для отримання імені, тому, коли ви запитаєте ім'я, відповідний клієнт відповість, але запит пошуку IP-адреси не існує. Також немає центрального магазину для адрес.

Сподіваюсь, це допоможе комусь іншому, оскільки я витратив занадто багато часу на відстеження цього.

Якщо у когось є якісь інші ідеї з цього питання, я люблю їх чути.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.