browser - 解析浏览器地址栏中的 mDNS .local URL

标签 browser dns server jmdns mdns

我正在尝试在 LAN 中运行 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 浏览器应用程序上显示得很好。通过 IP 和端口可以正常访问服务器。

ZeroConf Browser Screenshot

在 Windows 7 上,在任何地址栏(Firefox、Chrome、Safari、IE)中输入带有 .local TLD (= http://roseblade.local/ ) 的名称并没有多大作用,而且根据我的研究显示,这几乎是一项徒劳的任务。我安装了 Apple Bonjour,但这仅有助于运行 Hobbyist Software 的 Bonjour 浏览器。 就 Linux 而言,我对 elemantaryOS 和 Midori 进行了相同的尝试,但也没有成功。 我目前无法使用 OSX 或 iOS。

如何获得 .local 地址的解析以在我的浏览器(Firefox、Chrome、Linux、OSX 或 Windows7 上的任何浏览器)中工作?难道我做错了什么?此时我只想验证 mDNS 是否可以像系统上那样工作。

也欢迎提供有关该问题的 Material 。

最佳答案

mDNS 和 Bonjour 可能有点令人困惑,因为它们实际上包含一些不同的功能。服务发现就是其中之一,我相信您已经实现了这一点。解析地址(这就是您正在寻找的地址)是单独的,并且需要单独解决。地址解析工作完成后,您可以将服务发现指向解析器提供的 DNS 记录。

mDNS 地址解析的工作原理是通过网络多播 DNS 查询。通过绑定(bind)到 UDP 端口、监听查询并应答查询,您可以向 mDNS 客户端提供 DNS 记录。为此,您可以使用现有的 mDNS 服务器(例如 avahi-daemon),或者,如果您需要自定义功能或与应用程序集成,请使用 Node.js 的 multicast-dns 之类的东西来实现一个。 .

但是,根据我的经验,这相当不稳定。某些网络配置会干扰 mDNS 解析,某些操作系统也是如此(例如 iOS 8,请参阅围绕 discoveryd 与 mDNSResponder 的整个争论)。

关于browser - 解析浏览器地址栏中的 mDNS .local URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29637622/

相关文章:

android - 更改网络浏览器中的默认搜索引擎

java - 我怎样才能在 JAVA swing 的文件中使用类似 html 文件按钮的浏览器?

c++ - 如何使 res_query 与 dns 缓存一起工作?

postgresql - 如何将更新期间数据库争用的可能性降至最低

Java DNS 后缀

python - 在浏览器中显示图像的简单 python 3 Web 服务器

javascript - 创建浏览器退出弹出窗口

node.js - Docker 不公开 Node 和 webpack 开发服务器的端口

ssh - Play框架2.3.x,无需控制台即可运行

javascript - 使用浏览器控制台添加元素