Как узнать IP-адрес хоста с помощью mdns?

Моя цель — узнать IP-адрес «сервера» компьютера с Linux в локальной сети из компьютер с Windows. С другого Linux-компьютера «клиент» я могу сделать:

ping -c1 server.local

и получить ответ. И «сервер», и «клиент» работают на Avahi, так что это несложно. Однако я хотел бы узнать IP-адрес «сервера» из моего приложения Python, которое работает как на компьютерах с MS Windows, так и на Linux. Обратите внимание :на компьютерах с MS Windows, которые не запускают программное обеспечение mDNS, нет разрешения имени хоста (и, очевидно, pingне работает в указанных системах Windows ).

Я знаю о существовании pyzeroconf , и это модуль, который я пытался использовать; однако документация скудна и не очень полезна для меня. Используя такие инструменты, как avahi-discover, я вычислил, что компьютеры публикуют записи типа службы_workstation._tcp.local.(с явно фиктивным портом 9, службу сброса )типа mDNS PTR, которая может быть эквивалентом записи DNS A. Или я мог совершенно неправильно понять механизм mDNS.

Как узнать IP-адрес компьютера (или получить список IP-адресов компьютеров )через mDNS из Python?

РАЗЪЯСНЕНИЕ (на основании комментария)

Очевидное socket.gethostbynameработает на компьютере с работающим и настроенным для использования программного обеспечения mDNS (, например 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'

Однако на компьютерах с ОС Windows, на которых не установлено программное обеспечение mDNS (по умолчанию ), я получаю:

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 "", line 1, in 
socket.gaierror: [Errno 11001] getaddrinfo failed

12
задан tzot 8 May 2012 в 23:33
поделиться