开头

关于 ANDROID 5.0-7.1.2 网络图标上的感叹号及其解决办法-狐狸的小小窝

HTTP状态码之204 No Content

原理

访问generate_204地址,如果得到状态码是204则网络畅通。

           如果不是,则需要认为需要登录

但是以下测试让我有点懵逼

测试

请自行下载curl工具

在未登录的情况下,我们访问generate_204地址试试,如:
C:\WINDOWS\system32>curl http://edge.microsoft.com/captiveportal/generate_204
<html>
<head>
<meta http-equiv="Cache-Control" contect="no-cache">
<meta http-equiv="Pragma" contect="no-cache">
<meta http-equiv="Expires" contect="0">
<script type="text/javascript">
location.replace("http://这里是WIFI登录地址");
</script></head><body>
</body></html>

C:\WINDOWS\system32>

发现可以直接得到跳转的地址(即WIFI Portal登录地址)

关于函数location.replace() 见: https://developer.mozilla.org/zh-CN/docs/Web/API/Location/replace

而登录WIFI之后,再访问204地址则是得到空内容

C:\WINDOWS\system32>curl http://edge.microsoft.com/captiveportal/generate_204

C:\WINDOWS\system32>

抓包结果

所以有没有人告诉我为什么访问204地址能得到登录地址呢?以下是Fiddler抓包内容

好像是直接返回带有302的状态码的响应报文(Response)?

那么它的实现原理应该就是拦截了未登录用户的所有http请求并返回302(HTTP重定向)?

试了一下未登录时curl baidu.com也是返回302,但是curl https://baidu.com却不返回,也就是说不能劫持https请求?

疑问:那204的https只是用来验证网络通畅性?http才能用来验证网络通畅性并登录?不清楚,这个得拿到源码才知道。

相关资料

可用的204地址有:

http://connect.rom.miui.com/generate_204

http://connectivitycheck.platform.hicloud.com/generate_204

http://edge.microsoft.com/captiveportal/generate_204

可能有用的资料:

https://gmd20.github.io/blog/Wifi热点强制登录认证页面captive portal相关资料

https://wenku.baidu.com/view/be00908884868762caaed57f.html

Captive Portal - 连接WiFi自动弹出认证页面

安卓O源码之http://androidxref.com/8.0.0_r4/xref/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java?a=true&h=

好像还有判断portal登陆是否支持https的代码,见

http://androidxref.com/8.0.0_r4/xref/frameworks/base/services/core/java/com/android/server/connectivity/NetworkMonitor.java#mUseHttps

的914行附近

最新文章

  1. css flex布局
  2. myeclipse 注释模板
  3. p12(PKCS12)和jks互相转换
  4. Silverlight用户自定义控件件中增加属性和方法
  5. IIS负载均衡(转)
  6. Firefox访问https出现 ssl_error_weak_server_ephemeral_dh_key错误
  7. 异常详细信息: System.Data.SqlClient.SqlException:用户 &#39;IIS APPPOOL\DefaultAppPool&#39; 登录失败解决办法
  8. Bootstrap_表单
  9. python之math模块
  10. iOS开发关于xcode中souceControl的苹果文档翻译(节选)
  11. Linux系统文件的三个重要时间详解
  12. angular4 JavaScript内存溢出问题 (FATAL ERROR: CALL_AND_RETRY_LAST Allocation failed - JavaScript heap out of memory)
  13. 201521123101 《Java程序设计》第9周学习总结
  14. WKWebView 加载本地HTML显示不出网页问题,这点你注意了吗?-------完美显示
  15. pip 使用豆瓣源
  16. Mysql SQL注入漏洞
  17. Exceptionless 生产部署笔记
  18. activiti官网实例项目activiti-explorer之扩展流程节点属性2
  19. SQL Server对比两字符串的相似度(函数算法)
  20. Linq与Lambda常用查询语法

热门文章

  1. Go语言系列教程
  2. 1+x 证书 Web 前端开发 HTML5 专项练习
  3. PHP 的异步并行和协程 C 扩展 Swoole (附链接)
  4. app自动化测试初体验
  5. linux的vi编辑器常用用法一览
  6. SpringBoot开发案例之mail中文附件名字乱码
  7. vue-路由-显示名称
  8. webpack关于CommonsChunkPlugin在高版本被移除的替代方案问题
  9. 如何通过纯javascript实现表单提交
  10. Android框架Volley使用:Get请求实现