免费开发软件的网站建设,网站营销设计,网站建设开发方式包括哪些,网站 被降权问题描述 使用Android设备打开设置#xff0c;选择WIFI输入正确密码连接#xff0c;会显示已连接#xff0c;无网络#xff0c;然后变成网络连接受限#xff0c;实际可以使用此WIFI进行上网。
问题分析 异常Log
D NetworkMonitor/100: PROBE_DNS www.google.com 107ms O…问题描述 使用Android设备打开设置选择WIFI输入正确密码连接会显示已连接无网络然后变成网络连接受限实际可以使用此WIFI进行上网。
问题分析 异常Log
D NetworkMonitor/100: PROBE_DNS www.google.com 107ms OK 104.244.46.85
D NetworkMonitor/100: PROBE_DNS connectivitycheck.gstatic.com 118ms OK 203.208.50.66
D NetworkMonitor/100: PROBE_HTTP http://connectivitycheck.gstatic.com/generate_204 time35ms ret302 request{Connection[close], User-Agent[Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.32 Safari/537.36]} headers{null[HTTP/1.0 302 Moved Temporarily], Allow[GET,POST,HEAD], Location[http://10.10.1.2:8080/cn/index.html], MIME-Version[1.0], Pragma[No-Cache], Server[AP Server 1.0], X-Android-Received-Millis[1615220820212], X-Android-Response-Source[NETWORK 302], X-Android-Selected-Protocol[http/1.0], X-Android-Sent-Millis[1615220820196]}
D NetworkMonitor/100: PROBE_HTTPS https://www.google.com/generate_204 Probe failed with exception javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
D NetworkMonitor/100: isCaptivePortal: isSuccessful()false isPortal()true RedirectUrlhttp://10.10.1.2:8080/cn/index.html isPartialConnectivity()false Time172ms 从Log中可以看出来连接WIFI会进行网络的校验从而判断是否可用HTTP校验成功但是HTTPS校验失败因此会显示网络连接受限其连接过程中会出现短暂的已连接无网络是正常现象。HTTPS校验的网址https://www.google.com/generate_204由于在国内无法访问所以会校验失败可采取的做法是替换此网址。
packages/modules/NetworkStack/src/com/android/server/connectivity/NetworkMonitor.java
#校验源码部分
private CaptivePortalProbeResult sendDnsAndHttpProbes(ProxyInfo proxy, URL url, int probeType) {// Pre-resolve the captive portal server host so we can log it.// Only do this if HttpURLConnection is about to, to avoid any potentially// unnecessary resolution.final String host (proxy ! null) ? proxy.getHost() : url.getHost();// This method cannot safely report probe results because it might not be running on the// state machine thread. Reporting results here would cause races and potentially send// information to callers that does not make sense because the state machine has already// changed state.sendDnsProbe(host);return sendHttpProbe(url, probeType, null);
}# HTTPS网址相关源码
private final URL mCaptivePortalHttpsUrl;
mCaptivePortalHttpsUrl makeURL(getCaptivePortalServerHttpsUrl());
public String getCaptivePortalServerHttpUrl() {return getSettingFromResource(mContext, R.string.config_captive_portal_http_url,R.string.default_captive_portal_http_url, CAPTIVE_PORTAL_HTTP_URL);
} 解决方案 packages/modules/NetworkStack/res/values/config.xml
!-- HTTP URL for network validation, to use for detecting captive portals. --
string namedefault_captive_portal_http_url translatablefalsehttp://connectivitycheck.gstatic.com/generate_204/string
!-- HTTPS URL for network validation, to use for confirming internet connectivity. --
- string namedefault_captive_portal_https_url translatablefalsehttps://www.google.com/generate_204/stringstring namedefault_captive_portal_https_url translatablefalsehttps://developers.google.cn/generate_204/string 网上还有另一种解法如下就是关闭校验此解法可以实现不显示网络连接受限的问题但是在连接需要登陆的WIFI时无法连接
frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
loadSetting(stmt, Settings.Global.LID_BEHAVIOR, defaultLidBehavior);
loadStringSetting(stmt, Settings.Global.NTP_SERVER_2,R.string.def_ntp_server_2);loadSetting(stmt, Global.CAPTIVE_PORTAL_MODE, Global.CAPTIVE_PORTAL_MODE_IGNORE); 关于captive_portal_mode的值 0彻底禁用检测 1检测到需要登录则弹窗提醒默认值 2检测到需要登录则自动断开此热点并不再自动连接