Разрешить mDNS .local URL-адрес в адресной строке браузера

Я пытаюсь запустить HTTP-сервер в своей локальной сети и хочу получить к нему доступ с помощью браузера на другом настольном компьютере. Поскольку мне не нравится вводить IP-адрес и порт вручную, я попытался настроить mDNS с помощью jmDNS.

        String type = "_http._tcp.local.";
        jmdns = JmDNS.create();
        jmdns.addServiceListener(type, listener = new ServiceListener() {
            @Override
            public void serviceResolved(ServiceEvent ev) {
                Log.d(LogTag.SERVER, "Service resolved: " + ev.getInfo().getQualifiedName() + " port:"
                        + ev.getInfo().getPort());
            }

            @Override
            public void serviceRemoved(ServiceEvent ev) {
                Log.d(LogTag.SERVER, "Service removed: " + ev.getName());
            }

            @Override
            public void serviceAdded(ServiceEvent event) {
                // Required to force serviceResolved to be called again (after the first search)
                jmdns.requestServiceInfo(event.getType(), event.getName(), 1);
            }
        });
        serviceInfo = ServiceInfo.create(type, NAME, PORT, "test service");
        jmdns.registerService(serviceInfo);

Запись mDNS прекрасно отображается в приложении ZeroConf Browser. Сервер доступен по IP и порту просто отлично.

Снимок экрана браузера ZeroConf

В Windows 7 введите имя с доменом верхнего уровня .local (= http://roseblade.local/) в любой адрес bar (Firefox, Chrome, Safari, IE) мало что делает, и, судя по моим исследованиям, в любом случае это бесполезная задача. Я установил Apple Bonjour, но это помогло только запустить браузер Bonjour от Hobbyist Software. Что касается Linux, я пробовал то же самое с elemantaryOS и Midori, но это тоже не сработало. OSX или iOS в настоящее время мне недоступны.

Как я могу заставить разрешение адреса .local работать в моем браузере (Firefox, Chrome, что угодно в Linux, OSX или Windows7)? Я делаю что-то неправильно? На данный момент я просто хотел бы убедиться, что mDNS может работать так в системе.

Указатели на материалы по проблеме также приветствуются.


person Lucas Hoepner    schedule 14.04.2015    source источник
comment
Вы когда-нибудь находили решение этого?   -  person Ian    schedule 09.09.2015
comment
К сожалению, нет, не смог заставить это работать и перешел к другим вещам. Просто сделал быстрый поиск в Google, может быть: learn.adafruit .com/ помогает.   -  person Lucas Hoepner    schedule 14.09.2015
comment
Думаю, я разобрался. Я добавлю ответ на случай, если кто-то еще придет искать.   -  person Ian    schedule 14.09.2015


Ответы (1)


mDNS и Bonjour могут немного сбивать с толку, потому что на самом деле они включают в себя несколько разных функций. Обнаружение службы, которое, как я полагаю, реализовано вами, является одним из них. Разрешение адреса — это то, что вы ищете — отдельно, и его нужно решать отдельно. После того, как у вас заработает разрешение адресов, вы можете направить обнаружение службы на записи DNS, предоставленные вашим распознавателем.

Разрешение адресов mDNS работает путем многоадресной рассылки DNS-запроса по сети. Привязываясь к порту UDP, прослушивая запросы и отвечая на них, вы можете предоставлять записи DNS клиентам mDNS. Для этого вы можете использовать существующий сервер mDNS, такой как avahi-daemon, или, если вам нужны специальные функции или интеграция с вашим приложением, реализовать его с помощью чего-то вроде multicast-dns.

Однако, по моему опыту, это было довольно хлопотно. Некоторые сетевые конфигурации мешают разрешению mDNS, как и некоторые операционные системы (например, iOS 8, см. все дебаты вокруг обнаруженного против mDNSResponder).

person Ian    schedule 14.09.2015