2

我正在尝试从使用 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 获取主机名?

4

0 回答 0