苹果弹窗的嗅探报文并不总是立即发出,偶尔会出现不大于45秒的延迟,因此产生了弹窗慢的问题。查看苹果的官方文档,发现苹果在分配到ip以后如果该网络没有cache过会进入网络评估状态,这个过程需要与注册为“热点助手(Hotspot helper)”的APP交互。系统先发一个评估(Evaluate)的命令给每一个热点助手,命令包含SSID和BSSID,每一个命令助手要在45秒内做出对该网络的可信度(有none, low, high三档)评估。
(1)第一个给出high的热点助手会被选为best_helper,后面的弹窗会与该助手交互。
(2)如果所有的热点助手都没有给出high,选择给评估最高的助手为best_helper,后面的弹窗会与该助手交互。(比如有四个助手,三个给了none,一个给了low,那么这个给low的会被选中)
(3)如果45秒没有热点助手给出任何可信度的评估,苹果会迁移到认证结束(Authenticated)的状态,不会有弹窗。
从抓包上看,再结合苹果对热点助手的规则,可以推断出:最坏的结果是,首次连接,也许所有的热点助手都没有关于当前网络的记录,所以评估过程不可能在45秒内给出high,甚至最少有一个给了none其他的根本没有给出评估结果,超时后系统把这个给出none的选为best_helper,开始后面的弹窗交互,这种情况,一定会延迟45秒。也有可能是热点助手收到评估命令后,有些立刻给出了评估,有些给的迟一些,但是还是在45秒以内所有的助手都给出了评估,系统选出来了best_helper,开始弹窗流程,这个过程也许用了10秒,也许用了20秒,这可能就是弹窗延迟时间不定的原因