在浏览器地址栏中解析mDNS .local URL

时间:2015-04-14 21:21:23

标签: browser dns server jmdns mdns

我正在尝试在我的局域网中运行HTTP服务器,并希望通过在另一台台式机上使用浏览器来访问它。由于我不喜欢手动输入IP地址和端口,我尝试使用jmDNS设置mDNS。

        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 Browser Screenshot

在Windows 7上,将.local TLD(= http://roseblade.local/)的名称输入任何地址栏(Firefox,Chrome,Safari,IE)并没有太大作用,而我的研究显示这几乎是徒劳的无论如何。我安装了Apple Bonjour,但这只能帮助运行Hobbyist Software的Bonjour浏览器。 就Linux而言,我尝试使用elemantaryOS和Midori,但这也行不通。 我目前无法使用OSX或iOS。

如何在我的浏览器中使用.local地址的分辨率(Firefox,Chrome,Linux,OSX或Windows7上的任何内容)?难道我做错了什么?在这一点上,我只想验证mDNS可以像在系统上那样工作。

对此问题的重要指示也表示赞赏。

1 个答案:

答案 0 :(得分:1)

mDNS和Bonjour可能有点令人困惑,因为它们实际上包含了一些不同的功能。服务发现,我认为是您实施的,是一个。解决地址 - 这是您正在寻找的 - 是分开的,需要单独解决。完成地址解析后,您可以将服务发现指向解析器提供的DNS记录。

mDNS地址解析通过在网络上组播DNS查询来工作。通过绑定到UDP端口,侦听查询并回答它们,您可以向mDNS客户端提供DNS记录。为此,您可以使用现有的mDNS服务器,如avahi-daemon,或者,如果您需要自定义功能或与您的应用程序集成,请使用Node.js的multicast-dns等实现一个。

然而,根据我的经验,这是相当有趣的。一些网络配置会干扰mDNS解析,一些操作系统(例如iOS 8,请参阅有关发现与mDNSResponder的整个争论)。