Comment puis-je trouver l'adresse IP d'un hôte à l'aide de mdns?

Mon objectif est de faire découvrir l'adresse IP d'un ordinateur Linux "server" dans le réseau local à partir d'un ordinateur Windows. À partir d'un autre ordinateur sous Linux "client" je peux le faire:

ping -c1 server.local

et d'obtenir une réponse. Les deux "serveur" et "client" exécuter Avahi, donc c'est facile. Cependant, je voudrais découvrir l'adresse IP de "serveur" à partir d'une application en Python de la mine, qui fonctionne sur MS Windows et Linux. Remarque: sur MS Windows ordinateurs ne pas exécuter mDNS logiciel, il n'y a pas de résolution de nom d'hôte (et évidemment ping ne fonctionne pas sur les systèmes Windows).

Je connais l'existence de pyzeroconf, et c'est le module que j'ai essayé de l'utiliser; toutefois, la documentation est rare et pas très utile pour moi. En utilisant des outils comme avahi-discover, j'ai pensé que les ordinateurs de publier les enregistrements du type de service _workstation._tcp.local. (avec évidemment le mannequin port 9, les rejets de service) de mDNS type PTR qui pourrait être l'équivalent d'un DNS UN enregistrement. Ou j'ai peut-être mal compris complètement le mDNS mécanisme.

Comment connaître l'adresse IP d'un ordinateur (ou d'obtenir une liste des adresses IP des ordinateurs) par le biais de mDNS de Python?

CLARIFICATION (basé sur un commentaire)

L'évidence socket.gethostbyname fonctionne sur un ordinateur exécutant et configuré pour utiliser le mDNS logiciel (comme Avahi):

Python 2.6.5 (r265:79063, Apr 16 2010, 13:09:56)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> socket.gethostbyname('server.local')
'192.168.42.42'

Cependant, sur les ordinateurs Windows exécute pas mDNS logiciel (par défaut), j'obtiens:

Python 2.7.1 (r271:86832, Nov 27 2010, 18:30:46) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> socket.gethostbyname('server.local')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
socket.gaierror: [Errno 11001] getaddrinfo failed
  • Puisque vous pouvez faire un ping sur le serveur à l'aide d'un nom d'hôte, pourquoi ne pas simplement utiliser le normal résolution de nom d'hôte? Comme socket.gethostbyname
  • Parce que normal de résolution de nom d'hôte pour un mDNS-document publié sur un ordinateur Windows s'exécute pas bonjour ou mdnsresponder ou que ce soit ne fonctionne pas.
  • Vous voulez être en mesure de le faire sans une dépendance sur Bonjour pour Windows?
  • ... Vous voulez écrire un mDNS démon en Python? Vous êtes mieux de simplement les jeter dans Avahi.
  • Super, donc je vais me jeter dans Avahi pour Windows. Non, attendez. Et dans tous les cas, les ordinateurs Windows ont déjà Python, mais je ne peux pas installer d'autres logiciels. Je pense que je serais mieux si j'ai utilisé pyzeroconf dans mon cas précis (c'EST un mDNS démon, après tout); j'ai juste besoin de la documentation utile pour elle.
InformationsquelleAutor tzot | 2012-04-20