关于wifi portal认证--为浏览器添加wifi认证功能

1.什么是portal认证

2.android的原生portal认证概要讲述

3.独立出portal认证到浏览器

1.什么是portal认证

就是连接wifi成功后,有些需要去一个登录页面,登录后才能正常使用wifi。在现在商店比如肯德基,万科,万达等很多外场,都有这样的认证方式。还不清楚的百度下portal认证

2.android的原生portal认证概要讲述

Handling Network Sign-On

Some Wi-Fi networks block Internet access until the user clicks through a sign-on page. Such sign-on pages are typically presented by using HTTP redirects. You can use getURL() to test if your connection has been unexpectedly redirected. This check is not valid until after the response headers have been received, which you can trigger by calling getHeaderFields() or getInputStream(). For example, to check that a response was not redirected to an unexpected host:

HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();

try {

InputStream in = new BufferedInputStream(urlConnection.getInputStream());

if (!url.getHost().equals(urlConnection.getURL().getHost())) {

// we were redirected! Kick the user out to the browser to sign on?

...

} finally {

urlConnection.disconnect();

}

}

google翻译:

处理网络点登录

一些Wi-Fi网络禁止访问Internet ,直到用户点击通过一个登录页面。这样的登录页面通常通过使用HTTP重定向呈现。您可以使用的getURL ()来测试,如果你的连接意外重定向。此检查是无效的,直到已收到响应报头之后,您可以通过调用getHeaderFields ()或的getInputStream ()触发。例如,要检查一个响应没有重定向到一个意想不到的主机:

然后在android系统中会有如下判断:

private boolean More ...isWalledGardenConnection() {

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();

// We got a valid response, but not from the real google

return urlConnection.getResponseCode() != 204;

} catch (IOException e) {

if (DBG) {

log("Walled garden check - probably not a portal: exception " + e);

}

return false;

} finally {

if (urlConnection != null) {

urlConnection.disconnect();

}

}

}

大概意思是说,那一个连接去测试,如果返回的是204 就是连接成功的,如果不是就是需要认证的,然后弹出需要认证的通知栏。点击通知,会打开,CaptivePortalLogin.apk 里面就一个activity

public class CaptivePortalLoginActivity extends Activity {

private static final String TAG = "CaptivePortalLogin";

private static final String DEFAULT_SERVER = "clients3.google.com";

private static final int SOCKET_TIMEOUT_MS = 10000;

// Keep this in sync with NetworkMonitor.

// Intent broadcast to ConnectivityService indicating sign-in is complete.

// Extras:

// EXTRA_TEXT = netId

// LOGGED_IN_RESULT = "1" if we should use network, "0" if not.

private static final String ACTION_CAPTIVE_PORTAL_LOGGED_IN =

"android.net.netmon.captive_portal_logged_in";

private static final String LOGGED_IN_RESULT = "result";

private URL mURL;

private int mNetId;

private NetworkCallback mNetworkCallback;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

String server = Settings.Global.getString(getContentResolver(), "captive_portal_server");

if (server == null) server = DEFAULT_SERVER;

try {

mURL = new URL("http://" + server + "/generate_204");

} catch (MalformedURLException e) {

done(true);

}

....

private void testForCaptivePortal() {

new Thread(new Runnable() {

public void run() {

// Give time for captive portal to open.

try {

Thread.sleep(1000);

} catch (InterruptedException e) {

}

HttpURLConnection urlConnection = null;

int httpResponseCode = 500;

try {

urlConnection = (HttpURLConnection) mURL.openConnection();

urlConnection.setInstanceFollowRedirects(false);

urlConnection.setConnectTimeout(SOCKET_TIMEOUT_MS);

urlConnection.setReadTimeout(SOCKET_TIMEOUT_MS);

urlConnection.setUseCaches(false);

urlConnection.getInputStream();

httpResponseCode = urlConnection.getResponseCode();

} catch (IOException e) {

} finally {

if (urlConnection != null) urlConnection.disconnect();

}

if (httpResponseCode == 204) {

done(true);

}

}

}).start();

}

private class MyWebViewClient extends WebViewClient {

private boolean firstPageLoad = true;

@Override

public void onPageStarted(WebView view, String url, Bitmap favicon) {

if (firstPageLoad) return;

testForCaptivePortal();

}

@Override

public void onPageFinished(WebView view, String url) {

if (firstPageLoad) {

firstPageLoad = false;

// Now that WebView has loaded at least one page we know it has read in the proxy

// settings. Now prompt the WebView read the Network-specific proxy settings.

setWebViewProxy();

// Load the real page.

view.loadUrl(mURL.toString());

return;

}

testForCaptivePortal();

}

}

就是用个webView去打开认证登录的网页。如果连接成功了就,发送广播,应该是去删除通知栏消息之类的操作。

3.独立出portal认证到浏览器

将这部分功能独立出来,放到自己的浏览器中或者apk中,改怎么做呢?有两种方式

1、接收系统的intent 就是已经有系统的通知了,当用户点击通知的时候弹出自己apk中的acivity这里面需要在activity中加入如下属性,才会弹出用户选择框。

2、不依赖系统自己做检测,自己弹出通知流程如下

public class ConnectChangeReceiver extends BroadcastReceiver {

@Override

public void onReceive(Context context, Intent arg1) {

Intent i = new Intent(context,WifiPortalCheckService.class);

context.startService(i);

}

}

用一个接收器接收网络变化广播,然后启动个服务,在服务中做如下判断,如果连接不上就弹出通知,后面就和方案1一样了

private boolean isNeed() {

final String mWalledGardenUrl = "http://XXXX/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) {

return false;

} finally {

if (urlConnection != null) {

urlConnection.disconnect();

}

}

}

logo 2.jpg

newifi3 web认证_关于wifi portal认证--为浏览器添加wifi认证功能相关推荐

  1. 关于wifi portal认证--为浏览器添加wifi认证功能

    ###关于wifi portal认证–为浏览器添加wifi认证功能 1.什么是portal认证 2.android的原生portal认证概要讲述 3.独立出portal认证到浏览器 ####1.什么是 ...

  2. opensips mysql 认证_基于ubuntu中使用mysql实现opensips用户认证的解决方法

    1 MySQL支持 1.1 MySQL模块支持 默认安装时,不包含MySQL模块. opensipsctlrc文件中包含了数据库配置的信息,要想让opensips支持mysql数据库,在编译安装的时候 ...

  3. lm80认证_中国能效标识GB30255、GB38450和GB37478认证要求讲解

    可能有些朋友可能有所关注zui新的灯具节能认证标准的实施.质量认证中心简称"CQC"于2019年8月8号发布通知开始执行新版道路用LED灯具及室内照明用LED产品的能效认证标准,原 ...

  4. mysql邮箱认证_邮件服务系列postfix+sasl+mysql实现用户认证功能

    1.卸载bind [root@mail ~]# rpm -e bind-utils 2.安装bind97-utils bind97-libs bind97 [root@mail ~]# yum ins ...

  5. 5120v2怎么配置web登陆_阿里企业邮箱如何配置和添加到第三个电子邮件客户端中?...

    我们常见的第三方邮箱客户端有:Outlook.Thunderbird.Live mail.Web客户端.畅邮(DM Pro)客户端等,下面用畅邮(DM Pro)为例. 流程 一.配置信息 企业邮箱PO ...

  6. Web前端_如何清除微信内置浏览器的缓存

    Android 清除微信内置浏览器缓存: 先点击这个链接 升级下浏览器的内核: debugmm.qq.com/?forcex5=true 在点击这个链接 : http://debugtbs.qq.co ...

  7. portal服务器认证系统有哪些,portal服务器认证过程问题

    直接认证和可跨三层Portal认证流程相同.二次地址分配认证流程因为有两次地址分配过程,所以其认证流程和另外两种认证方式有所不同. 1. 直接认证和可跨三层Portal认证的流程(CHAP/PAP认证 ...

  8. portal服务器认证系统有哪些,Portal技术简介

    9.三层Portal认证过程 图5直接认证/可跨三层Portal认证流程图 http://www.h3c.com.cn/res/201006/29/20100629_1002773_image009_ ...

  9. php portal 接口,WIFI Portal登录(示例代码)

    原理: 访问generate_204地址,如果得到状态码是204则网络畅通. 如果不是,则需要认为需要登录 但是以下测试让我有点懵逼 在未登录的情况下,我们访问generate_204地址试试,如: ...

最新文章

  1. [深度学习] 一篇文章理解 word2vec
  2. verilog设置24进制计数器_阅读笔记:《Verilog HDL入门》第3章 Verilog语言要素
  3. java没有timer类_Java中的Java.util.Timer类 - Break易站
  4. pin码计算器网页版_AP微积分Excel简便计算+网页工具指南
  5. 惠普HP1280墨盒型号
  6. python识别出蓝色_OpenCVPython——无法检测蓝色对象
  7. d).关于steal lock
  8. Java中的序列化问题
  9. 如何解读vmlinux.lds.S文件
  10. NP完全问题贪婪算法
  11. python增量爬虫_python网络爬虫——增量式爬虫
  12. 通用模块脚本使用案例:玩家与NPC对话
  13. 电脑硬件软件相关知识
  14. java thread 简单写法_Java线程池写法改写为C#线程池写法
  15. 自制一个SD/TF的读卡器
  16. MTK平台双击Power打开Camera的简单流程
  17. 俞敏洪一分钟励志演讲
  18. History(查看历史命令)的用法
  19. packet tracer 下载及简介
  20. PTA基础编程题目集 7-20 打印九九口诀表 (15分)

热门文章

  1. Java调用 新浪微博API 接口发微博,逐项讲解,绝对清晰
  2. ubuntu 通过命令行上传百度云
  3. 【调剂】云南大学2023年硕士研究生招生预计接收校外调剂专业相关信息
  4. 树莓派Pi Pico套件 MicroPython编程
  5. C语言求职笔试题,c语言面试最必考的十道试题,求职必看!!!
  6. 基于JavaEE的减脂训练营营员管理系统
  7. 视频知识点(13)- M3U8 视频封装格式的深度解析
  8. 如何在WampServer和phpStudy中MySQL导入sql文件
  9. Tampermonkey用户脚本管理器
  10. xss平台打cookie登录后台(保姆级教程)