无线热点登陆认证原理探究---captive portal 什么是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 - 登录原理 密码 ...
- spring-security 登陆认证之初次探究
首先,希望还对 spring-security框架完全不懂的新手 下载下Git源码. 引入到项目中.这个短文就是边看源码边聊的.也会启动下项目验证自己的推想. 一.登陆认证的登陆配置项 <for ...
- 【树莓派】【转】利用USB网卡配置树莓派为无线热点
由于Wifi很慢,基本不可用:树莓派有无线网卡,恰好看到有文章用树莓派来做无线热点,利用树莓派来共享无线网络.比较有用,转发后续尝试. 本文转自:https://www.embbnux.com/201 ...
- windows7 中开启无线热点
我用的是移动的 CMCC-EDU 上网,但是这个只能在一个设备上登陆,那么问题就来了,当我电脑需要用网,手机也想要用网(不用 2/3/4G)该怎么办? 电脑操作系统:windows7 接下来是开启 w ...
- [原] KVM 虚拟化原理探究(1)— overview
KVM 虚拟化原理探究- overview 标签(空格分隔): KVM 写在前面的话 本文不介绍kvm和qemu的基本安装操作,希望读者具有一定的KVM实践经验.同时希望借此系列博客,能够对KVM底层 ...
- [原] KVM 虚拟化原理探究 —— 目录
KVM 虚拟化原理探究 -- 目录 标签(空格分隔): KVM KVM 虚拟化原理探究(1)- overview KVM 虚拟化原理探究(2)- QEMU启动过程 KVM 虚拟化原理探究(3)- CP ...
- [原] KVM 虚拟化原理探究(6)— 块设备IO虚拟化
KVM 虚拟化原理探究(6)- 块设备IO虚拟化 标签(空格分隔): KVM [toc] 块设备IO虚拟化简介 上一篇文章讲到了网络IO虚拟化,作为另外一个重要的虚拟化资源,块设备IO的虚拟化也是同样 ...
- [原] KVM 虚拟化原理探究(5)— 网络IO虚拟化
KVM 虚拟化原理探究(5)- 网络IO虚拟化 标签(空格分隔): KVM IO 虚拟化简介 前面的文章介绍了KVM的启动过程,CPU虚拟化,内存虚拟化原理.作为一个完整的风诺依曼计算机系统,必然有输 ...
随机推荐
- 如何在Windows Server 2008 R2中更改桌面图标
如何在Windows Server 2008 R2中更改桌面图标 Windows Server 2008 R2 已经在 MSDN 和 TechNet Plus 订阅上公布,gOxiA 在第一时间下载并 ...
- Angular cookies
参考地址:https://stackoverflow.com/questions/34298133/angular-cookies/36093800#36093800 @Component({ sel ...
- 18点睛Spring4.1-Meta Annotation
18.1 Meta Annotation 元注解:顾名思义,就是注解的注解 当我们某几个注解要在多个地方重复使用的时候,写起来比较麻烦,定义一个元注解可以包含多个注解的含义,从而简化代码 下面我们用& ...
- Centos7防火墙关闭和启用iptables操作
https://yq.aliyun.com/ziliao/33590前序 还是docker惹得最近做的系统都是上的centos7的系统带来的一系列的新环境的适应 补记下:在使用oracle vmbox ...
- python解析本地HTML文件
Python使用爬虫技术时,每运行一次,本地都会访问一次主机.为避免完成程序前调试时多次访问主机增加主机负荷,我们可以在编写程序前将网页源代码存在本地,调试时访问本地文件即可.现在我来分享一下爬取资料 ...
- 【转】mysql 存储过程的示例
原文地址:https://blog.csdn.net/lishaojun0115/article/details/50183661 begin #定义变量 declare local_sender v ...
- 十分钟快速入门 Python,看完即会,不用收藏!
本文以 Eric Matthes 的<Python编程:从入门到实践>为基础,以有一定其他语言经验的程序员视角,对书中内容提炼总结,化繁为简,将这本书的精髓融合成一篇10分钟能读完的文章. ...
- java FastJson的使用总结
1.前言 1.1.FastJson的介绍: JSON(javaScript Object Notation)是一种轻量级的数据交换格式.主要采用键值对({"name": " ...
- 多进程实现并发服务器(TCP)
前提:基于Linux系统的学习 /*多进程实现并发服务器 父进程任务 1.从未决连接队列中取出请求,建立和客户端的连接,cfd 2.创建子进程 3.close(cfd) 4.负责子进程的收尸工作 子进 ...
- X86驱动:恢复SSDT内核钩子
SSDT 中文名称为系统服务描述符表,该表的作用是将Ring3应用层与Ring0内核层,两者的API函数连接起来,起到承上启下的作用,SSDT并不仅仅只包含一个庞大的地址索引表,它还包含着一些其它有用 ...