portal页面自动弹出原理

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

在WIFI的应用场景中,有个很典型的应用,叫做Captive Portal,也叫Captive Web Portal(CWP)。

大致流程是:
1.用户的移动设备(例如手机)接入WIFI。

2.打开任意网页。

3.得到一个类似Login的页面,需要用户填写一些信息,然后提交。

4.认证通过后,允许自由访问网络,否则无法上网。

电信、移动等运营商经常会推出一些市区里的WIFI,很多用的就是这种方式。

还有像机场等地。

有个典型的应用,就是杭州的ihangzhou。

iOS,还有Mac OS,都有个功能,当接入无线网络后,会自动检测网络是否通。

如果不通,则会自动弹出一个页面,让用户去登录。

Apple把这种功能叫做Captive Network Assistant(CNA)。

其原理如下:
1.发送一个HTTP/1.0的请求
到/library/test/success.html
2.接收一个回应,如果回应跟它预计的结果一致,那么认为网络是通的,就
不会自动弹出页面。

同时,状态栏的WIFI图标出现。

流程结束。

否则,
进入下一步。

3.如果收到的回应不是它想要的那个,它就认为有CWP存在。

4.如果有CWP存在,iOS就会自动打开一个页面,在这个页面中再请求一次
/library/test/success.html,这一次,使用的是HTTP/1.1。

5.然后就可以打开Login页面了。

在第2步中,如果有CWP存在,收到的回应通常是一个Login页面,这个和第5步收到的结果应该是一样的。

如果网络能,则可以收到下面的回应。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML
3.2//EN"><HTML><HEAD><TITLE>Success</TITLE></HEAD><BODY>Success</BODY ></HTML>
只是第2步中,iOS是如何判断的,不得而知。

不过只要保证收到上面的响应,则一定能通。

那么,第2步中如果没有收到响应,或是收到了非HTTP 200的响应又会如何呢?
根据我的测试,如果没收到响应,依然会弹出一个窗口。

不过,这不是一种正常的CWP状态。

非HTTP 200的情况,我只试了HTTP 302重定向。

在这种情况下,iOS不会自动弹出Login页面。

在上面的5步中,得到了一个Login页面,然后又会发生什么呢?
用户拿到Login页面后,应该填写一些信息,并且提交。

iOS会在用户提交后,立即发一边第1步中的请求,再次检测网络。

如果此时网络还是不通,iOS会自动断开当前的SSID。

不过这个行为好像有点不稳定,具体就不细说了。

网络通了后,在iOS上基本有2个现象。

一是右上角的“取消”按钮变成”完成“,或是自动关闭这个窗口,行为似乎不太一致。

最关键的是顶端状态栏WIFI 图标的出现。

从现象上看,只要WIFI图标不出来,iOS就不允许有流外出(部分特殊的除外)。

********** 副作用**********
iOS的这种行为,其实没给用户多少方便,却会带来不少麻烦。

我记得在iOS 4时,还可以选择是否启用auto-login。

不过iOS 6已经没有这个选项了。

理论上讲,这个功能最麻烦的就是要保证你所在的网络可以访问
/library/test/success.html。

如果仅仅是在公司内部网络,不允许访问外网,那么iOS就无法连接了。

【题外话】在iOS 5以前,只有open的SSID才会发test请求。

(open的SSID 指的是没有802.1X或PSK认证的)。

而从iOS 6开始,连上非open的网络也会发这个test了。

所以,在这种内网的情况下,需要防火墙开放的访问,或是WIFI AP可以支持避开CNA的检测。

我一直没在网上找到关于CNA的判断标准,不知道Apple搞这么个东西干吗。

********** 测试结果 **********
写完此文,心里一直痒痒的,想知道第2步究竟是怎么判断的。

于是立即动手测试。

我发现,只要响应页面中,<TITLE>的值是Success,大小写敏感,就可以欺骗iOS了。

测了iOS 6.0和Mac OS 10.7,结果都一样。

这下我心里释怀了。

不知道新版本会不会有变化。

该死的苹果。

相关文档
最新文档