Стандартная служба mDNS в Windows

Есть ли в Windows (некоторые современные версии) установленный и / или работающий по умолчанию сервер mDNS? Если да, то как сообщить ему, предпочтительно динамически, запустить/остановить рекламу новой услуги?

Если стандарта нет, то как решить проблему конфликтов при попытке запуска нескольких mDNS-серверов в этой среде?

По сути, я хочу реализовать сервис, который будет работать в Linux, Windows и Mac OS X и которому необходимо рекламировать свое местоположение веб-сервера zeroconf с помощью mDNS. В Linux я просто использую avahi-publish (или устанавливаю файл конфигурации). Я предполагаю, что ответ будет простым для OS X. Я изо всех сил пытаюсь найти информацию для Windows.


person awy    schedule 13.05.2014    source источник


Ответы (6)


Нет, Microsoft напрямую не поддерживает Multicast-DNS.

Тем не менее, похоже, есть несколько сторонних альтернатив:

person FoggyDay    schedule 13.05.2014

Начиная с Windows 10, Microsoft добилась значительных успехов в реализации mDNS и DNS-SD для Windows.

В то время как более ранние итерации были ограничены приложениями UWP, общий Win32 API доступен как минимум из SDK версии 10.0.18362.0 (1903/19H1, май 2019 г.).

Примечание. В настоящее время подтверждено, что эта реализация работает только для целей 64-битной сборки, существует нерешенная проблема, препятствующая компиляции для 32-битных целей.

Устаревшее примечание из предыдущей версии этого ответа:

Ранние итерации привели к затопление сети mDNS:

Windows 10 в конфигурации по умолчанию будет спамить свои локальные сети, отвечая на все запросы mDNS нулевыми ответными пакетами.

Эта проблема была исправлена ​​в Windows 10 1511 (10586) и выше.

person Jens Habegger    schedule 07.12.2016
comment
который в настоящее время ограничен приложениями UWP => больше не соответствует действительности. На странице, на которую вы сейчас ссылаетесь, говорится, что API Win32 DNS Service Discovery (DNS-SD) объявлены в заголовке windns.h. Например, API-интерфейсы Win32 для объявления и обнаружения служб — это DnsServiceRegister и DnsServiceBrowse. - person Simon Kissane; 25.11.2020
comment
Спасибо за внимание. К сожалению, в документации не указано, с каких пор это ограничение было снято. Я адаптирую ответ, чтобы отразить новую ситуацию. - person Jens Habegger; 25.11.2020
comment
Согласно случайному, но информативному PR на GitHub, API-интерфейсы были открыты для Win32. в SDK версии 10.0.18362.0 (1903/19H1). (Возможно, API-интерфейсы Win32 существовали все это время, но только задокументированы и представлены в общедоступных заголовочных файлах, начиная с этой версии SDK.) Кроме того, в том же PR упоминается, что, по-видимому, этот API не работает и содержит ошибки на 32-битной версии, но отлично работает на 64-битной. - person Simon Kissane; 25.11.2020
comment
Спасибо за ваше исследование, я обновил ответ, чтобы отразить последние разработки. - person Jens Habegger; 25.11.2020

В прошлый раз, когда мне это понадобилось, Bonjour Print Services для Windows от Apple был самым удобным клиентом mDNS для Windows I. мог найти. Всего 5 МБ.

person Nicolas Melay    schedule 06.12.2016
comment
Мне не удалось заставить это работать в самой последней версии Windows 10. Я подозреваю, что причина в том, что сама Windows (процесс, называемый DNSCache) теперь прослушивает порт 5353. - person Kevin Keane; 10.06.2018

Также успешно использовали C++/WinRT для обнаружения dnssd прямо из C++. С нашей точки зрения, это быстрее и надежнее для запросов к службам и позволит вам легко установить наблюдатель для получения уведомлений о поступлении устройств и т. д. Конечно, это ограничено версиями Windows 10 с поддержкой C++/WinRT, которая начинается с 10.0.17134.0 (Windows 10, версия 1803).

Одно предостережение: мы заметили, что он не предоставляет и не распознает FQDN (точка в конце ). Таким образом, для устройства, которое Bonjour ИЛИ Avahi давало бы адрес mydevice.local., Windows вместо этого дает mydevice.local. Попытка пропинговать mydevice.local. под Windows 10 (1809) не удалась.

person Ian    schedule 19.03.2019
comment
Я очень заинтересован в вашем решении, так как у нас точно такая же проблема... не могли бы вы поделиться кодом/примером... это было бы СУПЕР полезно! Спасибо. - person user3256556; 30.04.2020

Windows 10 изначально поддерживает mDNS/Zeroconf, но только для современных API, а не для приложений Win32. Если у вас есть такое приложение, требуется сторонняя служба.

Источник: https://social.technet.microsoft.com/Forums/en-US/8a0346de-2296-4f46-bc36-ff3fb13e283b/builtin-mdnsdnssd-zeroconf-support-in-windows-10

person FarO    schedule 18.08.2019
comment
только для современных API, а не для приложений Win32 =› больше не соответствует действительности. См. API DnsServiceRegister и DnsServiceBrowse в файле windns.h. - person Simon Kissane; 25.11.2020
comment
@SimonKissane, можете ли вы предоставить ссылку, так как вы упомянули об ошибке и (я думаю) также проголосовали против? - person FarO; 25.11.2020
comment
нет, я не минусовал тебя. Это должен был сделать кто-то другой. Для ссылки см. ответ Йенса Хабеггера выше, который был обновлен с подробностями. - person Simon Kissane; 26.11.2020

Короткий ответ — поддерживать как Avahi, так и Bonjour. В любом случае вам понадобится поддержка Bonjour для работы на OSX, и если пользователь Windows установил iTunes, он уже будет его запускать.

В качестве запасного варианта для пользователей Windows, не использующих iTunes, вы можете скомпилировать Avahi как библиотеку для Windows (с небольшими усилиями) и связать ее. Это нетривиальная упаковка, но альтернативой является требование, чтобы пользователи Windows установили iTunes, чтобы использовать ваше приложение.

person Arc    schedule 06.06.2015
comment
Avahi и Bonjour — это реализации одного и того же протокола с разной лицензией. en.wikipedia.org/wiki/Avahi_(программное обеспечение)#Avahi_vs._Bonjour< /а> - person Matt; 17.03.2016