一、手机连上wifi后会自动弹窗的原理

生活中,有很多需要认证的路由器,手机连接wifi热点后会自动弹出一个网页,让用户输入账号和密码,比如星巴克,肯地基,麦当劳,甚至是火车站和机场的候车室。其实这是一种叫强制门户认证的技术--Captive Network。就是说,单用户连上一个wifi后,可以不需要输入wifi的密码,但是需要进行认证才能够访问到互联网。这种路由器有很多开源的软件,比如wifidog、openwrt等。但是他们的原理都是一样的,通过iptable跳转,DNS拦截,和HTTP重定向,甚至有的会采用网页重构,最后无论用户输入任何域名,任何URL,任何IP地址,都会被强制指定到某一个网页上去。
补充解释(DNS拦截简单的说,就是对IP地址的绑架,让DNS解析成WEB开发者想要让用户访问的IP地址,这样就实现了对IP的绑架。而HTTP重定向是把当前请求的网页转移到另一个不同的网页,虽然用户不知道自己访问的网页已经发生了重定向,但是HTTP头会记录下这一切,重定向后的网页返回的HTTP状态是30X。网页重构是通过JS进行网页的重定向,但是不会改变HTTP头的状态。)
所以,手机只要在连上wifi后,就去向互联网发起一次请求(不同的手机有不同的请求地址,比如苹果手机请求的是www.apple.com,而原版的安卓手机请求的是client3.google.com,但是这些请求的网址,不同的手机厂商自己可以通过修改Android的内核进行修改的,不是绝对的,有的手机甚至直接阉割了这个原版安卓的功能,有的则对这个功能进行了限制使用)。如果返回的网页是被重定向过的,也就是HTTP头的状态是30X的,手机就会认为这个wifi需要强制认证,因此会弹出浏览器,重新发起一次请求。这就是手机连上wifi后会自动弹窗的原理。

二、实现方案

如果要做一个可以让手机连上wifi后会自动弹窗网页的wifiAP热点,那么就要按照上面原理说的,要让手机第一次发起的请求返回的HTTP头状态变为30X。
这里因为RTK没能够连接到外网,所以需要自己移植一个DNS服务器到RTK上,进行域名的解析,并对IP地址进行绑架,这个原理跟iptable是一样的。我这里移植了一个最新的开源DNS服务器,bind.9.10.tar.gz 域名解析服务器。移植过程都是一样的,官网下载源码,然后解压缩,进行交叉编译,最后安装,然后拷贝到RTK开发板上。需要说的是DNS的配置问题,怎么把所有的域名都解析为一个固定的IP呢,其实很简单,DNS的配置规则书写也是比较简单的。只需要在配置文件的named.conf中加入这样一条规则:

“@ IN SOA ns.domain.com.
hostmaster.domain.com.
( 1 3h 1h 1w 1d )
IN NS 172.16.31.1
* IN A 172.16.31.1”

表示让所有的域名都指向172.16.31.1这个IP地址,* 号表示所有域名。就是这么简单。
PS:其实如果RTK能够连上外网,外网有好多专业的DNS域名解析服务器,等解析回来的IP地址后,利用iptable对IP地址进行跳转,也是一样能够绑架IP的,但是这里RTK不能够上网,所以之前移植的iptable的作用不大。但是加上iptable的跳转也是可以的,如果遇到不安分的用户,随意输入IP地址,这时候iptable就可以进行IP跳转了。

接着,DNS把域名都强制解析为RTK的本机地址,172.16.31.1。这个时候,RTK上的web服务器就要发挥威力。web服务器都有一个模块功能,叫rewrite,就是重写网页的意思,专业名字叫HTTP的重定向,就是这个模块起的作用。所以,在web服务器的配置脚本中,把rewrite模块的注释去掉,因为web服务器,无论是apache,lighttpd都是默认不开启这个功能的,因为这个功能是在服务器进行维修的情况下,让请求都转移到备份服务器去才用得上,所以普通的web是没有开启的。但是我们恰恰要利用他的这个功能,就是要他发生重定向。所以这个功能必须启动。然后在配置文件的最后添加这样一段语句:

“#$HTTP["host"] ="^(!=a.html)" {
# url.redirect = (
# "^/(.*)" => "/index.html"
# )
#}”

告诉服务器,如果请求不是访问的a.html这个网页,就让他跳到index.html这个网页上,而index.html就是RTK的网页。这样,就实现了网页的跳转了。

三、存在的问题

通过上面的原理的介绍,不难发现,如果手机连上wifi后不主动请求,那么web服务器就不会提供服务,那手机就不会弹出网页。或者有些手机的软件做一些限制,比如在手机上通过还有一个智能识别软件,如果这个热点不能够访问外面,那就不弹出,甚至有的手机还直接做成,不能连接外网的热点,就不显示出来,直接屏蔽掉了。所以,最终能不能弹出网页,很大程度上得看手机厂商的脸色。如果他们把这个功能阉割了,那就永远都无法弹窗,因为手机都没有去请求服务器。所以这种情况就得用户在连上wifi后,自动手动在点击一下手机上的浏览器,发起请求,然后被RTK上的DNS拦截,进而发生HTTP重定向。

手机连接wifi自动弹窗的原理及其实现方法相关推荐

  1. android wifi 静态地址设置_安卓手机连接wifi故障的6种常见解决方法

    现如今,人们已经离不开wifi的使用了,有了wifi,流量不够用什么的都是浮云.如果手机连接wifi出了问题怎么办?不要抓狂不要沮丧,六招让你手机wifi满血复活! 第一招:关闭并重启WIFI连接 用 ...

  2. 手机连接WIFI后无法上网,是怎么回事?

    手机连接上wifi却不能上网,尤其是别的无线设备都能上网,唯独一台手机不行,这种情况一般为手机设置和路由器设置问题,只需要按照下面步骤进行检查就可以. 手机连接wifi不能上网解决方法 1,手机无法获 ...

  3. 树莓派制作路由器,手机连接wifi

    树莓派制作路由器,手机连接wifi 在制作之前总的介绍本文用到的包:hostapd  以及dhcp服务 hostapd- 一个用户态用于AP和认证服务器的守护进程.它实现了IEEE 802.11相关的 ...

  4. 摩托罗拉手机连接Wifi后提示“网络受限”问题的解决!

    摩托罗拉手机连接Wifi后提示"网络受限"问题的解决! 配置wifi 解决"网络受限"方法: 因为我们所做的是墨西哥业务,使用国内手机有时候无法模拟国外出现线上 ...

  5. android wifi 验证失败怎么办,手机连接wifi身份验证失败怎么回事【图】

    原标题:"手机连接wifi身份验证出现问题怎么办?[图]"的相关路由器192.168.1.1登陆页面设置教程资料分享.- 来源:191路由网. 问:手机连接wifi身份验证出现问题 ...

  6. linux中修改静态ip后无法连接网络,我手机连接Wifi后有时候突然不能上网,我把设置中的静态iP改了才恢复,请教一下这是为什么?...

    我手机连接Wifi后有时候突然不能上网,我把设置中的静态iP改了才恢复,请教一下这是为什么?以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶 ...

  7. APP技巧:手机连接WiFi后,移动数据流量要不要关闭,看完你就懂了!

    在移动互联网普及的今天,大家想上网是非常容易的一件事情.打开手机数据流量一秒钟就能连接上互联网,享受网络带来的乐趣.不论是刷视频看电影还是下载需要的文件,统统都能够通过移动数据来搞定. 但是使用移动数 ...

  8. 【Android开发—智能家居系列】(三):手机连接WIFI模块

    [Android开发-智能家居系列](三):手机连接WIFI模块 概述 实现连接WIFI的功能会用到一个工具类,源码可以点击链接下载.网上这些类似的工具类里的代码差不多是一样的.连接无线网主要有两个方 ...

  9. 手机连接无线没有网络连接到服务器是怎么回事啊,手机连接WIFI后无法上网,是怎么回事?...

    原标题:手机连接WIFI后无法上网,是怎么回事? "极客谈科技",全新视角.全新思路,伴你遨游神奇的科技世界. 同一局域网内其他手机可以通过WiFi上网,只有一台手机存在问题.导致 ...

  10. 电脑上的计算机自动打开,手机连接电脑自动打开word

    手机连接电脑弹出Microsoft Office Word 2007 win8系统处理方法:1. 在控制面板-&gt:硬件和声音-&gt:自动播放里,2. iphone手机的设置值是 ...

最新文章

  1. 使用按钮控制HTML5背景音乐开关
  2. 【c语言】求三个数的最小数
  3. 多通道ADC一致性的高精度测量方法
  4. 算法--06谷歌面试:字符串中第一个只出现一次的字符(Java实现)
  5. python注释_Python头条:python基础知识了解___注释、变量、Debug
  6. (Head First 设计模式)学习笔记(1)
  7. Linux:环境变量
  8. Mac版Anaconda安装Tweepy包
  9. 常见的布局实现,以及响应式布局技巧。
  10. linux虚拟存储技术,红帽Linux 7.0发布:整合虚拟存储技术
  11. maven snapshot和release版本号之间的差
  12. testTry-catch和catch中的应用程序恢复
  13. webpack的五个核心概念---webpack工作笔记002
  14. 详解java类的生命周期 .
  15. easypoi list中的map导出_EasyPOI简单用例,简单有效
  16. DHT11温湿度传感器模块使用方法和驱动代码实现
  17. 难道这个会是我的广角选择?
  18. VS2010下编译mp4v2及在项目中的使用
  19. WPS文字中的某些内容下方出现的红色波浪线怎么去掉?
  20. 《Total Commander:万能文件管理器》——第7.2节.比较和同步文件夹

热门文章

  1. 云存储安全,主要面临哪些问题
  2. 泛微e9隐藏明细表_泛微Ecology权限整理大全,相当全要点
  3. 微信小程序轮播图高度自适应
  4. day55-负载均衡之lvs
  5. 学习笔记10--自动驾驶汽车软件架构
  6. 香港十大外汇交易平台排名(2021最新版)
  7. 网络舆情监测TOOM
  8. 熟练操作mac系统只需十分钟(Mac新手必看)!!
  9. itext html 转换pdf后 字体加粗,HTML转PDF字体的坑搞了半天
  10. 分布式高可用:故障恢复