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