如何在子网上使用Bonjour广告服务?
-
04-10-2019 - |
题
我熟悉Bonjour在“本地”域中的广告服务的用法。我曾努力研究过几个示例,我知道我使用的相应的可可班。
我很好奇我如何将简单的Bonjour服务宣传到其他子网。具体来说,我正在尝试编写在我的桌面上运行的网络服务,该网络通过以太网连接。客户端在通过WiFi连接的移动设备(iPhone/iPad)上运行。在我的网络设置中,wifi与以太网不同。但是,两者都在防火墙后面。我无需在防火墙之外做广告,我只是希望WiFi客户端可以看到以太网连接服务器广告宣传的服务。
这可能吗?我知道Bonjour应该支持跨子网的通信,但是每当我尝试阅读此功能时,它都会深入DNS Records和Whate。我是一个应用程序开发人员...我对这些东西一无所知,也不希望用户不必担心它。我错过了简单的东西吗?
解决方案
这不是一个典型的编程问题,但我认为这是测试基于Bonjour的代码的巨大障碍。
Bonjour支持服务器的两种机制,以告知客户的存在,首先是本地网络上的多播,DNS第二。
多播很容易使用,因为没有设置,不幸的是,它只能在同一网络上使用。
DNS具有跨路由器(Internet)工作的奢侈,但是它需要使用该名称服务器正确配置名称服务器和客户端。
我认为您只有两个选择。
- 在WiFi网络上宣传您的Bonjour服务
- 配置自己的DNS
在第一种情况下,重要的是要意识到该服务不一定必须通过在Mac上运行自己的应用程序来宣传。您可以使用实用程序 dns-sd
将任何IP地址/端口注册为网络上的Bonjour服务。为此,您需要连接到WiFi的机器(Mac,Linux),并运行 dns-sd
以类似的方式有:
dns-sd -P "Stack Overflow" _http._tcp . 80 stackoverflow.com 69.59.196.211
这将以名称“堆栈溢出”为Bonjour服务注册“ HTTP”服务。检查一下 - 在终端运行,并在Bonjour下的Safari书签中检查它。您可以注册申请的方式相同。
不幸的是,您需要在连接到WiFi网络的机器上运行此操作。这意味着您的Mac应用程序将在其自己的以太网网络上做广告, dns-sd
在wifi上做广告。
第二种选择有点令人恐惧,但是如果您愿意与某些政府弄脏手相关,这没什么大不了的。
同样,您无需在DNS中动态注册服务。您可以简单地将Mac的名称和应用程序端口硬编码在DNS配置中。这些只是需要添加到区域文件(DNS配置文件)的4行。
b._dns-sd._udp IN PTR @ ; b = browse domain
lb._dns-sd._udp IN PTR @ ; lb = legacy browse domain
_icool._tcp PTR iCool\ App\ Service._http._tcp
iCool\ App\ Service._http._tcp SRV 0 0 8888 macpro.domain.com.
前两行告诉客户端(在您的情况下iOS设备),该域已启用Bonjour。第三行告诉客户,有一个类型的服务“ ICool App Service” icool
可用的。第四行告诉客户当前地址和服务端口。
客户将寻找其配置(或通过DHCP获得)“搜索域”的DNS条目。检查您的网络设置。
您可以在Mac,一些Linux框上运行名称服务器,也可以使用Dyndns.com之类的服务。
希望这可以帮助。