¿Cómo obtengo el nombre de la máquina de una IP a través de DNS de multidifusión?

17

Tengo una lista de direcciones IP en una red, y la mayoría de ellas admiten DNS de multidifusión. Me gustaría poder resolver el nombre del servidor en lugar de solo tener la dirección 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

Funciona, pero me gustaría poder determinar ese nombre a partir de la IP. Además, los dispositivos no transmiten necesariamente ningún servicio, pero definitivamente admiten la transmisión mDNS. Así que mirar a través de los servicios no funcionará.

Adán
fuente
1
¿Qué sistema operativo estás usando? mdns-scan parece ser una opción en linux.
Zoredache
1
OS X, pero si puedo obtener una solución de Linux, estoy seguro de que puedo encontrar un análogo en el mundo de Mac. mdns-scan busca servicios transmitidos, por lo que eso no va a funcionar. Algunos de los dispositivos no transmiten ningún servicio, pero resolverán su dirección cuando se les consulte por su nombre.
Adam

Respuestas:

23

Como ya conoce las direcciones IP, puede buscar la entrada inversa de cada dirección IP para obtener la dirección de reenvío asociada:

$ 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

Para una salida más amigable con el script de shell, use '+ short':

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

Dependiendo de su caso de uso previsto, puede haber un método más apropiado para realizar la consulta. No dude en ponerse en contacto conmigo si necesita más información.

andrewtj
fuente
2
¿Alguna idea de por qué esto podría fallar en un dispositivo iOS que no ejecuta ningún servicio Bonjour? Funciona contra una Mac que de otro modo no ejecuta ningún servicio de Bonjour.
John Wright
Vale la pena señalar que también puede averiguar qué direcciones IP están en la red utilizando arp-scaninstalado desde homebrew o macports. O bien, si lo que desea es tener una idea de las máquinas de la red, usted podría mirar a su tabla ARP actual usando un comando ya en OS X: arp. Específicamente, puede usar el comando arp -n -i <interface> -l -a, donde <interface>debe estar el nombre de la interfaz de red que le interesa (por ejemplo en0).
Parthian Shot
5

En Linux, puede usar el comando getent de la biblioteca:

getent hosts 192.168.0.52

O instale avahi-utils y ejecute

avahi-resolve-address 192.168.0.52
Tobu
fuente
El paquete está avahi-toolsen Fedora y es lo único en esta página que funcionó :)
Navin
-1

Bueno, hice un poco más de investigación sobre esto, y mirando a través de mDNDS y el protocolo, parece que esto no es realmente posible. Hay una solicitud de búsqueda en el protocolo para la recuperación de nombres, por lo que cuando solicita un nombre, el cliente apropiado responderá, pero no hay una solicitud de búsqueda de una IP. Tampoco hay una tienda central para direcciones.

Espero que esto ayude a alguien más, ya que he pasado demasiado tiempo rastreando esto.

Si alguien tiene alguna otra idea sobre este tema, me encantaría escucharla.

Adán
fuente