Bagaimana cara mendapatkan nama mesin dari IP melalui DNS Multicast?

17

Saya memiliki daftar alamat IP di jaringan, dan kebanyakan dari mereka mendukung DNS multicast. Saya ingin dapat menyelesaikan nama server alih-alih hanya memiliki alamat 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

Berhasil, tetapi saya ingin dapat menentukan nama itu dari IP. Juga perangkat tidak selalu menyiarkan layanan apa pun, tetapi pasti mendukung siaran mDNS. Jadi mencari melalui layanan tidak akan berhasil.

Adam
sumber
1
OS apa yang Anda gunakan? mdns-scan tampaknya menjadi opsi di linux.
Zoredache
1
OS X, tetapi jika saya bisa mendapatkan solusi linux, saya yakin saya bisa menemukan analog di dunia mac. mdns-scan mencari layanan yang disiarkan, jadi itu tidak akan berfungsi. Beberapa perangkat tidak menyiarkan layanan apa pun, tetapi akan menyelesaikan alamatnya saat ditanya nama.
Adam

Jawaban:

23

Karena Anda sudah mengetahui alamat IP, Anda dapat mencari entri sebaliknya untuk setiap alamat IP untuk mendapatkan alamat penerusan yang terkait:

$ 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

Untuk hasil yang lebih ramah skrip shell, gunakan '+ pendek':

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

Bergantung pada kasus penggunaan yang Anda maksudkan, mungkin ada metode yang lebih tepat untuk melakukan kueri. Jangan ragu untuk menghubungi saya jika Anda memerlukan informasi lebih lanjut.

andrewtj
sumber
2
Adakah alasan mengapa hal ini dapat gagal terhadap perangkat iOS yang tidak menjalankan layanan Bonjour? Ini bekerja melawan Mac yang tidak menjalankan layanan Bonjour.
John Wright
Perlu dicatat bahwa Anda juga dapat mengetahui alamat IP mana yang ada di jaringan menggunakan yang arp-scandiinstal dari homebrew atau macports. Atau, jika Anda hanya ingin mendapatkan nuansa bagi tuan rumah pada jaringan, Anda bisa melihat tabel ARP Anda saat menggunakan perintah sudah di OS X: arp. Secara khusus, Anda dapat menggunakan perintah arp -n -i <interface> -l -a, di mana <interface>seharusnya nama antarmuka jaringan yang Anda ingin tahu (misalnya en0).
Parthian Shot
5

Di Linux, Anda dapat menggunakan perintah getent dari libc:

getent hosts 192.168.0.52

Atau instal avahi-utils, dan jalankan

avahi-resolve-address 192.168.0.52
Tobu
sumber
Paketnya ada avahi-toolsdi Fedora dan satu-satunya hal di halaman ini yang bekerja :)
Navin
-1

Yah saya melakukan sedikit riset yang lebih adil tentang ini, dan melihat melalui mDNDS dan protokol, sepertinya ini sebenarnya tidak mungkin. Ada permintaan pencarian pada protokol untuk pencarian nama, jadi ketika Anda meminta nama, klien yang sesuai akan merespons, tetapi tidak ada permintaan pencarian untuk IP. Juga tidak ada toko pusat untuk alamat.

Semoga ini bisa membantu orang lain, karena saya telah menghabiskan terlalu banyak waktu untuk melacaknya.

Jika ada yang punya ide lain tentang masalah ini, saya senang mendengarnya.

Adam
sumber