博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
检測wifi是否须要portal验证 公共场所wifi验证
阅读量:6272 次
发布时间:2019-06-22

本文共 1857 字,大约阅读时间需要 6 分钟。

何为wifi portal验证?

平时在商场,咖啡厅,银行等公共场所。我们手机提示:有可用WLAN。这些WIFI能够直接连接,不须要password,但须要我们手动在手机网页上进行验证,通常是输入一个手机号码,点击获取验证码或password。server会发一条短信验证码或password到手机上,将其输入网页的password框,登陆就可以使用免费wifi。这个验证的网页称为portal(翻译:门。入门,表示要使用这个公共wifi,就要先“进入”这个门,也就是验证的意思)。

案例

有些手机监听到用户连接wifi时,假设这个wifi是须要进行portal验证的话。就会自己主动弹出一个界面(或启动一个浏览器),这个界面里面有一个验证网页,给用户进行wifi验证。这样就不用用户手动去打开浏览器进行验证。提高用户体验。但有些手机就偏偏不会自己主动弹出这个验证页面。那么。假设你公司开发一款app,须要自己主动弹出这个wifi portal验证界面(针对于某些不会弹出验证界面的系统)。那怎么办呢?
目标
我们的目标非常明白:就是要在wifi连接后。推断wifi是否须要portal验证?假设须要portal验证,那么我们直接启动一个intent去发起任意一个网页的訪问,如:http://www.baidu.com。此时,portalserver会检測到有新的用户连接。就会劫持用户的wifi路由。强制去訪问wifi的portal验证网页(类似过滤器),用户仅仅要在这个网页上完毕验证,就可以使用wifi。

实现
以下的代码块是抽取于android源代码里的一个方法,该方法就是检測当前手机连接的wifi是否须要进行portal验证。一般这种方法都是放在wifi连接状态发生变化的广播接收器里面。

private boolean isWifiSetPortal() {        final String mWalledGardenUrl = "http://clients3.google.com/generate_204";        final int WALLED_GARDEN_SOCKET_TIMEOUT_MS = 10000;        HttpURLConnection urlConnection = null;        try {            URL url = new URL(mWalledGardenUrl);            urlConnection = (HttpURLConnection) url.openConnection();            urlConnection.setInstanceFollowRedirects(false);            urlConnection.setConnectTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);            urlConnection.setReadTimeout(WALLED_GARDEN_SOCKET_TIMEOUT_MS);            urlConnection.setUseCaches(false);            urlConnection.getInputStream();            return urlConnection.getResponseCode() != 204;        } catch (IOException e) {            //e.printStackTrace();            return false;        } finally {            if (urlConnection != null) {                urlConnection.disconnect();            }        }    }
这个实现非常easy,谷歌会进行一个http的訪问,假设返回码为204,就证明手机当前连接的wifi,是不须要进行portal验证的。否则。则须要进行portal验证。


至于为什么会是204。这个临时没研究,知道的朋友能够留言告诉我一下。

转载于:https://www.cnblogs.com/clnchanpin/p/6914475.html

你可能感兴趣的文章
Dubbo常用配置解析
查看>>
【转】C#解析Json Newtonsoft.Json
查看>>
macports的安装及常用命令
查看>>
(转)使用C#开发ActiveX控件
查看>>
spring mvc 基于注解 配置默认 handlermapping
查看>>
半小时学会上传本地项目到github
查看>>
Android学Jni/Ndk 开发记录(一)
查看>>
Linux Tcl和Expect的安装
查看>>
WPF中的依赖项属性(转)
查看>>
linux防火墙相关 iptables
查看>>
最简单的单例模式
查看>>
JPopupMenu的使用以及JPopupMenu中子组件的事件处理
查看>>
从反汇编的角度看引用和指针的区别
查看>>
拓马长枪定乾坤
查看>>
UIProgressView的详细使用
查看>>
Silverlight实用窍门系列:70.Silverlight的视觉状态组VisualStateGroup
查看>>
照片筛选与上传功能
查看>>
Hello ZED
查看>>
常见web攻击方式
查看>>
hdu 4472
查看>>