我正在尝试从使用mDNS / Zeroconf在本地网络上进行广告宣传的服务获取主机名。我正在使用Android的网络服务发现API,但似乎Android并未使用广告的主机名,而是尝试进行反向DNS查找,如果失败,则仅返回IP地址。
在Macbook上,我可以执行以下操作:
$ dns-sd -B _myservice._tcp
DATE: ---Mon 29 Oct 2018---
17:35:25.332 ...STARTING...
Timestamp A/R Flags if Domain Service Type Instance Name
17:35:25.333 Add 2 10 local. _myservice._tcp. My Service Name
$ dns-sd -L "My Service Name" _myservice._tcp
DATE: ---Mon 29 Oct 2018---
17:38:35.423 ...STARTING...
17:38:35.423 My\032Service\032Name._myservice._tcp.local. can be reached at test.my.service.local.:443 (interface 10)
然后我可以使用返回的主机名(test.my.service.local
)查找相应的IP。我已经使用NSNetServiceBrowser
在iOS上正常工作了。
如果我执行以下操作,请在onServiceDiscovered
上的Android上:
private static Map<String, Object> OnServiceDiscovered(NsdServiceInfo info) {
Log.d(TAG, info.getHost().getHostAddress());
Log.d(TAG, info.getHost().getHostName());
}
我确实获得了正确的IP地址,但是getHostName返回“ raspberrypi.local”(来自/ etc / hostname)或在另一个网络上仅返回IP地址。我的怀疑是,在Android上,getHost()。getHostName()正在执行反向DNS查找,并且完全忽略了通过mDNS通告的主机名。
有什么方法可以从Android上的mDNS获取主机名吗?