无线热点登陆认证原理探究---captive portal
什么是Captive Portal
大家肯定都连过公共场所的wifi热点,比如麦当劳等地方的。他们的wifi往往一连上去就会弹出一个要求登录或者微信关注之类的页面,只有在这个页面完成操作了才能正常访问网络的。之前看到这个很神奇,为什么一连wifi,手机就会自动打开这个网页的,就知道android系统应该是提供了一些接口的。最近接触到这个,查了一下才知道这个东西叫做“captive portal”,就是专门用来给后端的网关提供鉴权计费之类的服务的。很多公共场合的wifi热点应该都用了这么一个技术,比如酒店,商场,银行等等。
Apple的Captive Network Assistant
- 发送一个HTTP/1.0的请求到 http://www.apple.com/library/test/success.html
- 接收一个回应,如果回应跟它预计的结果一致,那么认为网络是通的,就不会自动弹出页面。同时,状态栏的WIFI图标出现。流程结束。否则,进入下一步。
- 如果收到的回应不是它想要的那个,它就认为有CWP存在。
- 如果有CWP存在,iOS就会自动打开一个页面,在这个页面中再请求一次 http://www.apple.com/library/test/success.html ,这一次使用的是HTTP/1.1。
- 然后就可以打开Login页面了。
1.一个通常的认证流程是什么样的,从设备接入到认证前后发生了哪些动作?
具体的实施方式有不止一种,例如:
- Redirection by HTTP(HTTP 重定向)
- ICMP Redirect (ICMP 重定向)
- Redirection by DNS (DNS 重定向)
在设备第一次接入到无线网络的时候,会通过 DHCP 服务获取到一个 IP 地址,可能是公有地址也可能是私有地址。不论分配到的 IP 地址属于公有或者私有,此时客户端都只具备访问指定站点的权限,需要在 Portal 页面上完成认证(确认接受使用条款,验证账号密码等),在 Portal 页面完成认证后,这个系统通常会立即执行一系列的动作包括,重新分配地址(在原本是私有地址时可选),更新这台设备对应的权限控制列表(ACL)中的信息解除访问限制,并开始计时/计费等动作。
当用户需要停止使用这类网络时,通常在 Portal 页面上会提供主动断开的按钮,或者服务器会在一段时间没有检测到该客户端网络流量时将你的设备做下线处理,以保证计费准确并及时释放占用的 IP 地址。
以上就是一台新设备接入到需要 Portal 认证的网络环境中在获得访问互联网权限之前的大致步骤。那在一台设备完成介入后,以后再访问这类网络是否可以不必进行重复的认证就直接接入网络呢?答案当然是肯定的,否则在网络条件不好时无穷无尽的输入账号密码登陆不用强调也知道是一件折磨死人的事情,而这个问题的解决使用了叫做无感知认证的解决方案。关于无感知认证在参考资料中给出了常见的认证方式下实现无感知认证的方案。无感知认证的思想总结起来就是在完成了首次认证后再次接入时会利用已保存的信息进行后台验证,不需要用户主动输入口令进行登陆。不过这并不是我想了解的重点,于是不再继续深入了解。
当时产生这个疑问的时候,是用 iPhone 连接到热点后,系统会弹出一个类似浏览器的窗口,那么这个窗口是怎么弹出来的,触发的条件又是什么呢。根据前面收集到的信息,我使用 Captive Portal iOS 作为关键字在谷歌进行搜索,找到了一些相关的信息,大致介绍了这里面相关的细节。iOS设备所弹出的认证窗口是由 Apple Captive Network Assistant(CNA) 来完成的。大体的流程是当你首先链接到 Wi-Fi 网络后,iOS 设备会从它所属的众多域名下的特定域名选择一个或多个进行访问,例如
- www.appleiphonecell.com
- captive.apple.com
- captive.apple.com
- www.apple.com
- www.itools.info
- www.ibook.info
- www.airport.us
- www.thinkdifferent.us
当域名能够被解析且对特定的网页访问得到正确的响应(通常是 Success )时,CNA 会判定设备成功的链接到了互联网,比如这个页面,。如果域名被解析但访问特定页面返回的内容不是预期的结果,那么 CNA 会认为设备所处网络存在Captive Portal,因此会调用一个专门的类似浏览器的页面来发起网络请求并触发 Portal 页面,来引导用户进行登录或者认证。
GET /library/test/success.html
HTTP/1.0
Host: www.apple.com
User-Agent:CaptiveNetworkSupport/1.0 wispr
Connection: close
可以看到,在请求特定的页面时,CNA 也使用了一个自定的 User-Agent,这有助于我们识别iOS设备的 Captive Portal 探测请求并选择性的绕过,来实现自定的认证方式
无线热点登陆认证原理探究---captive portal的更多相关文章
- 无线热点登陆认证原理探究---captive portal 什么是Captive Portal
什么是Captive Portal 大家肯定都连过公共场所的wifi热点,比如麦当劳等地方的.他们的wifi往往一连上去就会弹出一个要求登录或者微信关注之类的页面,只有在这个页面完成操作了才能正常访问 ...
- OpenSSH 密码和公钥认证原理探究
目录 配置和保护SSH H3 - 使用SSH 访问远程命令行 H4 - 什么是OpenSSH ? H4 - 登录方式: H4 - 登录并执行临时命令: H4 - 查看登录用户 H4 - 登录原理 密码 ...
- 我了解到的新知识之—Apple Captive Portal 网页认证登陆公共Wifi
因为今天一个用户遇到选择公司WiFi后,无法弹出网页认证登陆界面的问题,随即上网搜索相关信息,因为公司内没有VPN,无法FQ,只能用bing来搜索一下相关信息了. Captive Portal听起来好 ...
- spring-security 登陆认证之初次探究
首先,希望还对 spring-security框架完全不懂的新手 下载下Git源码. 引入到项目中.这个短文就是边看源码边聊的.也会启动下项目验证自己的推想. 一.登陆认证的登陆配置项 <for ...
- 【树莓派】【转】利用USB网卡配置树莓派为无线热点
由于Wifi很慢,基本不可用:树莓派有无线网卡,恰好看到有文章用树莓派来做无线热点,利用树莓派来共享无线网络.比较有用,转发后续尝试. 本文转自:https://www.embbnux.com/201 ...
- windows7 中开启无线热点
我用的是移动的 CMCC-EDU 上网,但是这个只能在一个设备上登陆,那么问题就来了,当我电脑需要用网,手机也想要用网(不用 2/3/4G)该怎么办? 电脑操作系统:windows7 接下来是开启 w ...
- Wireless Intranet Captive Portal
Wireless Intranet Captive Portal 配置AAA服务Radius认证 radius-server key 0 radius radius-server authentica ...
- 【DCN】Wireless Intranet Captive Portal
Wireless Intranet Captive Portal 配置AAA服务Radius认证 radius-server key 0 radius radius-server authentica ...
- [原] KVM 虚拟化原理探究(1)— overview
KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...
随机推荐
- 解决vue、cnpm造成的样式错位问题
删除node_modules文件夹使用npm install不要使用cnpm install
- 【转】关于AI的目标导向型行动计划
作者:Brent Owens 目标导向型行动计划(简称GOAP)是一种能够轻松呈现给你的代理选择的AI系统,也是帮助你可以无需维持一个庞大且复杂的有限状态机而做出明智的决策的机器. 演示版本 在这一演 ...
- PHP杂技(一)
逻辑运算符 &&和& ||和|的部分区别 返回结果类型不同, A||B 如果A为真那么B不会做判断,而A|B前后都做判断 switch判断中并不是===,更像是==,例如(1) ...
- java异常处理及400,404,500错误处理
java代码中经常碰到各种需要处理异常的时候,比如什么IOException SQLException NullPointException等等,在开发web项目中,遇到异常,我现在做的就 ...
- 【bzoj2333】[SCOI2011]棘手的操作 可并堆+STL-set
UPD:复杂度是fake的...大家还是去写启发式合并吧. 题目描述 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来有如下一些操作: U x y: 加一条 ...
- Dancing Links 模板
struct dl{ // x: line, y: column struct node{ int c, left, right, up, down; }; vector<node> a; ...
- setsockopt等高级使用
参考: setsockopt函数使用http://hi.baidu.com/yelangdefendou/item/74161d0f384abd3c4ac4a316http://blog.csdn.n ...
- C++基类与派生类的转换
具体表现在以下几个方面: 派生类对象可以向基类对象赋值. 可以用子类(即公用派生类)对象对其基类对象赋值.如 A a1; //定义基类A对象a1 B b1; //定义类A的公用派生类B的对 ...
- 剑指Offer 二进制中一的个数
链接:https://www.nowcoder.com/questionTerminal/8ee967e43c2c4ec193b040ea7fbb10b8 来源:牛客网 public class So ...
- 标准C程序设计七---101
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...