在江苏某地出差,酒店启用了ETV无线接入,接入WIFI后打开http网页会跳转认证,而https则不需要。当时因为使用的网页基本都是https,QQ也自适应通过https登陆成功,直到后面打开一下http站点才发现要认证。一般情况下输入手机号,然后获取验证码,认证即可。我当时由于笔电上安装了虚拟机,而且虚拟机的Nat网段恰好和路由器的Wifi网段相同,导致一直无法通过认证,不能使用网络,更是折腾出了用Surface开启Wifi共享给笔电用的昏招。后来抓了下包才发现是网络冲突,导致给路由器的认证包无法发送,进而无法使用网络。
来看一下正常用户流程:
1.打开任意http网址,比如http://baidu.com(这里要注意,必须是http,上面提到https是不需要认证的),网页会自动重定向。
2.输入号码,发送验证码。
3.验证码内容:677182,aWiFi登录密码,2分钟内有效。【爱上WiFi】
4.再次打开百度已经OK了。
在不认证的情况下,连接上Wifi之后,是无法使用Ping功能的,Ping阿里的Dns直接显示无法连接到端口。
向认证平台提交手机号,请求发送验证码的抓包:
向路由器提交token,请求认证的包,这里的token是由手机号和验证码的MD5摘要
做了个测试,在未认证的情况下同时打开http和https网址,http被重定向了,Iframe测试结果如下:
Iframe测试抓包,未认证的情况下同时打开http和https
在已认证仍然有效的情况下,重新打开认证页面或者被系统重定向至认证页面,会有一键快速登陆。
Iframe测试页面代码:
<iframe src="https://news.qq.com" width="1920" height="500"></iframe> <iframe src="https://news.qq.com" width="1920" height="500"></iframe>
Token代码:
function certificationFree(gw_address, gw_port, client_mac, mobile, passWord) { var authToken = hex_md5(mobile + "," + passWord); var url = "http://"+gw_address+":"+gw_port+"/wifidog/auth"; var authTime = "";//分钟 if (authTime == "" || authTime == "0" ) { authTime = 10080; } $.ajax({ url:url, // data:{"token":authToken,"duration":authTime}, data:"token=" + authToken + "&duration=" + authTime, dataType:"jsonp", beforeSend: function () { $("#tip").show(); $("#tip").html("登录中...."); }, complete: function () { $("#tip").hide(); }, success: function(data){ debugger if (data.code == 100) { //手机号 mobile和 client_mac 入库表 mobileclientmac, 查询界面做查询接口 //begin $.ajax({ type: "post", url: "/etv/Api/dataInsert.do", data:{"mobile":mobile,"client_mac":client_mac}, success: function(data){ } }); alert("认证成功"); window.location.href="welcome.html"; }else{ alert(data.msg); } } }); }
一些思考:
1.认证是通过Mac和手机号进行的,当Wifi客户端Mac地址变更后,需要重新认证,用户可以伪造Mac来进行接入。
2.Https默认不需要认证,是否可以通过外部https代理来进行http通讯,从而绕过认证。
最后的最后:
写完之后才发现网上有接口规范,介绍了一些认证使用的技术
广东电信aWiFi平台接口规范 https://wenku.baidu.com/view/6b9ac5cea216147916112885.html