如何从单个设备检测水平分割 DNS

如何从单个设备检测水平分割 DNS

我正在开发一款 iOS 应用,该应用使用 Bonjour 在同一 WiFi 网络上发现设备。它在某些网络上运行良好,但在其他网络上则不行(例如星巴克或 Panera)。设备可以看到自己,但看不到彼此。

我收到提示,这些网络可能正在使用 Split Horizo​​n DNS。我已确认无法从一台设备 ping 另一台设备。

问题是,如果 WiFi 网络无法工作,我想显示一条错误消息。

我以为我可能无法在这样的网络上 ping 自己,但我可以。

从单个设备检测水平分割的最佳策略是什么?换句话说,我无法在运行时 ping 另一个设备,因为我对其他设备一无所知。

答案1

如上所述,这几乎肯定是由于无线客户端被隔离。在公共 wifi 网络上这样做是完全合理的,如果任何公共网络不这样做,我会感到惊讶。(启用客户端到客户端通信后,有人可能会坐在网络上试图入侵其他用户的设备。这对用户来说是一个巨大的安全风险,当你提供热点用于互联网访问时,允许客户端互相看到有什么意义呢)。

如果您根本无法 ping 通其他客户端(通过 IP 地址),那么这显然与 DNS 无关。

我看不出有任何方法可以检测这一点,也没有真正简单的解决方案来解决这个问题。有些应用程序使用一个中央服务器,所有客户端都连接到该服务器,该服务器在客户端之间传递数据(例如 IM 应用程序),尽管根据应用程序的目标,这可能不是一个可行的解决方案。

最明显的答案是,您的应用程序只需要告诉用户它找不到任何其他客户端,也许会提供更多信息按钮/部分,详细说明它可能无法在某些网络(尤其是公共网络)上发现其他客户端的事实。

答案2

星巴克等场所会特意使用设备隔离,这样一来,一个顾客就无法与另一个顾客交谈。这是设计使然。

这实际上与 DNS 无关。

答案3

假设 iOS 可以访问设备 ARP 表,以下方法至少可以部分诊断客户端隔离:ping 子网的每个有效地址,并查看 ARP 表中是否显示这些地址(网关除外)的任何条目。如果显示,则表明至少有第 2 层流量通过,隔离可能未生效。如果没有显示任何条目,您至少可以告诉用户,如果附近有其他用户,则很有可能发生隔离。

这只是基于网络协议理论——我从未在 iOS 中编写过代码,所以我不知道如何实现。祝你好运!

相关内容