我正在尝试从使用 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。我已经在 iOS 上使用NSNetServiceBrowser
.
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 获取主机名?