我正在构build一个iOS应用,使用Bonjour在同一个WiFinetworking上进行设备发现。 它在一些networking上可以正常工作,但不能在其他networking上工作(如星巴克或Panera)。 设备看到自己,但不是彼此。
我收到了一个提示,说这些networking可能使用了Split Horizon DNS。 我已经证实,我无法从另一个设备ping设备。
问题是,如果WiFinetworking无法正常工作,我想显示一条错误消息。
我想也许我不能在这样的networking上自我平静,但我可以。
从单个设备检测Split Horizon的最佳策略是什么? 换句话说,我不能在运行时ping另一个设备,因为我对其他设备一无所知。
如前所述,这几乎可以肯定是由于无线客户端被隔离。 在公共无线networking上这样做是完全合理的,如果任何公共networking不这样做,我会感到惊讶。 (通过客户端到客户端的通信,人们可以坐在networking上试图攻击其他用户的设备,这对用户来说是一个巨大的安全风险,当你提供一个访问互联网的热点的时候,让客户能够看到彼此)。
如果您根本不能ping通其他客户端(通过IP地址),那么它显然与DNS无关。
我看不出有什么方法可以检测到这一点,也没有真正简单的解决办法。 一些应用程序使用所有客户端连接到的中央服务器,这些中央服务器在客户端(例如IM应用程序)之间中继数据,但取决于您的应用程序的目标可能不是一个可行的解决scheme。
最明显的答案是,你的应用程序将不得不告诉用户它找不到任何其他客户端,也许更多的信息button/部分,详细说明它可能无法发现某些networking上的其他客户端特别是公共的)。
像星巴克这样的地方有意使用设备隔离,以便一个客户不能与另一个客户交谈。 这是devise。
这实际上与DNS无关。
假设iOS可以访问设备ARP表,可以至less部分诊断客户端隔离:ping每个子网的有效地址,并查看这些地址(网关除外)的任何条目是否显示在ARP表中。 如果他们这样做,你知道至less二层stream量正在通过,隔离可能不起作用。 如果没有条目出现,至less可以告诉用户,如果附近有其他用户,则很可能会有隔离。
这只是基于networking协议理论 – 我从来没有在iOS编码,所以我不知道如何实现。 祝你好运!