Comment puis-je obtenir le nom de la machine à partir d'une adresse IP via DNS multidiffusion?

17

J'ai une liste d'adresses IP sur un réseau, et la plupart d'entre elles prennent en charge le DNS multicast. Je voudrais pouvoir résoudre le nom du serveur au lieu d'avoir simplement l'adresse 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

Fonctionne, mais j'aimerais pouvoir déterminer ce nom à partir de l'IP. De plus, les appareils ne diffusent pas nécessairement de services, mais prennent certainement en charge la diffusion mDNS. Ainsi, la recherche dans les services ne fonctionnera pas.

Adam
la source
1
Quel système d'exploitation utilisez-vous? mdns-scan semble être une option sur linux.
Zoredache
1
OS X, mais si je peux obtenir une solution linux, je suis sûr que je peux trouver un analogue dans le monde mac. mdns-scan recherche les services diffusés, donc cela ne fonctionnera pas. Certains appareils ne diffusent aucun service, mais résolvent leur adresse lorsqu'ils sont interrogés par leur nom.
Adam

Réponses:

23

Puisque vous connaissez déjà les adresses IP, vous pouvez rechercher l'entrée inversée pour chaque adresse IP pour obtenir l'adresse directe associée:

$ 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

Pour une sortie plus conviviale pour les scripts shell, utilisez '+ short':

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

Selon votre cas d'utilisation prévu, il peut exister une méthode plus appropriée pour exécuter la requête. N'hésitez pas à me contacter si vous avez besoin de plus amples informations.

andrewtj
la source
2
Une idée de pourquoi cela pourrait échouer sur un appareil iOS qui n'exécute aucun service Bonjour? Il fonctionne sur un Mac qui n'exécute aucun autre service Bonjour.
John Wright
Il convient de noter que vous pouvez également savoir quelles adresses IP se trouvent sur le réseau en utilisant arp-scaninstallé à partir de homebrew ou macports. Ou, si vous voulez juste avoir une idée pour les hôtes sur le réseau, vous pouvez regarder votre table ARP actuelle à l' aide d' une commande déjà sur OS X: arp. Plus précisément, vous pouvez utiliser la commande arp -n -i <interface> -l -a, où <interface>devrait être le nom de l'interface réseau qui vous intéresse (par exemple en0).
Parthian Shot
5

Sous Linux, vous pouvez utiliser la commande getent de la libc:

getent hosts 192.168.0.52

Ou installez avahi-utils et exécutez

avahi-resolve-address 192.168.0.52
Tobu
la source
Le paquet est avahi-toolssur Fedora et c'est la seule chose sur cette page qui a fonctionné :)
Navin
-1

Eh bien, j'ai fait un peu plus de recherche sur celui-ci, et en regardant mDNDS et le protocole, il semble que ce ne soit pas possible. Il y a une demande de recherche sur le protocole pour la récupération de nom, donc lorsque vous demandez un nom, le client approprié répondra, mais il n'y a pas de demande de recherche pour une IP. Il n'y a pas non plus de magasin central d'adresses.

J'espère que cela aidera quelqu'un d'autre, car j'ai passé trop de temps à suivre cela.

Si quelqu'un a d'autres idées à ce sujet, j'adore les entendre.

Adam
la source