android13 系统强制wifi连接到内网,假装具有互联网能力

packages\modules\Wifi\service\java\com\android\server\wifi\WifiNetworkSelector.java

cpp 复制代码
    /**
     * Check if current network has internet or is expected to not have internet
     */
    public boolean hasInternetOrExpectNoInternet(WifiInfo wifiInfo) {
        WifiConfiguration network =
                mWifiConfigManager.getConfiguredNetwork(wifiInfo.getNetworkId());
        if (network == null) {
            return false;
        }
        //return !network.hasNoInternetAccess() || network.isNoInternetAccessExpected();
		return true;
    }

强制返回true,前面的几篇都不要看了,没用

packages\modules\NetworkStack\src\com\android\server\connectivity\NetworkMonitor.java

cpp 复制代码
private CaptivePortalProbeResult isCaptivePortal(ValidationProperties properties,
            URL[] httpsUrls, URL[] httpUrls, URL fallbackUrl) {
    // 内网专属修改:强制返回检测成功,彻底跳过所有外网探针/门户检测
    validationLog("Internal network: skip all captive portal and internet probe check");
    return CaptivePortalProbeResult.success(CaptivePortalProbeResult.PROBE_UNKNOWN);

    // 以下原代码全部保留,无需做任何修改
    if (!mIsCaptivePortalCheckEnabled) {
        validationLog("Validation disabled.");
        return CaptivePortalProbeResult.success(CaptivePortalProbeResult.PROBE_UNKNOWN);
    }

    URL pacUrl = null;

    // On networks with a PAC instead of fetching a URL that should result in a 204
    // response, we instead simply fetch the PAC script.  This is done for a few reasons:
    // 1. At present our PAC code does not yet handle multiple PACs on multiple networks
    //    until something like https://android-review.googlesource.com/#/c/115180/ lands.
    //    Network.openConnection() will ignore network-specific PACs and instead fetch
    //    using NO_PROXY.  If a PAC is in place, the only fetch we know will succeed with
    //    NO_PROXY is the fetch of the PAC itself.
    // 2. To proxy the generate_204 fetch through a PAC would require a number of things
    //    happen before the fetch can commence, namely:
    //        a) the PAC script be fetched
    //        b) a PAC script resolver service be fired up and resolve the captive portal
    //           server.
    //    Network validation could be delayed until these prerequisities are satisifed or
    //    could simply be left to race them.  Neither is an optimal solution.
    // 3. PAC scripts are sometimes used to block or restrict Internet access and may in
    //    fact block fetching of the generate_204 URL which would lead to false negative
    //    results for network validation.
    final ProxyInfo proxyInfo = mLinkProperties.getHttpProxy();
    if (proxyInfo != null && !Uri.EMPTY.equals(proxyInfo.getPacFileUrl())) {
        pacUrl = makeURL(proxyInfo.getPacFileUrl().toString());
        if (pacUrl == null) {
            return CaptivePortalProbeResult.failed(CaptivePortalProbeResult.PROBE_UNKNOWN);
        }
    }

    if ((pacUrl == null) && (httpUrls.length == 0 || httpsUrls.length == 0
            || httpUrls[0] == null || httpsUrls[0] == null)) {
        return CaptivePortalProbeResult.failed(CaptivePortalProbeResult.PROBE_UNKNOWN);
    }

    long startTime = SystemClock.elapsedRealtime();

    final CaptivePortalProbeResult result;
    if (pacUrl != null) {
        result = sendDnsAndHttpProbes(null, pacUrl, ValidationProbeEvent.PROBE_PAC);
        reportHttpProbeResult(NETWORK_VALIDATION_PROBE_HTTP, result);
    } else if (mUseHttps && httpsUrls.length == 1 && httpUrls.length == 1) {
        // Probe results are reported inside sendHttpAndHttpsParallelWithFallbackProbes.
        result = sendHttpAndHttpsParallelWithFallbackProbes(properties, proxyInfo,
                httpsUrls[0], httpUrls[0], fallbackUrl);
    } else if (mUseHttps) {
        // Support result aggregation from multiple Urls.
        result = sendMultiParallelHttpAndHttpsProbes(properties, proxyInfo, httpsUrls,
                httpUrls);
    } else {
        result = sendDnsAndHttpProbes(proxyInfo, httpUrls[0], ValidationProbeEvent.PROBE_HTTP);
        reportHttpProbeResult(NETWORK_VALIDATION_PROBE_HTTP, result);
    }

    long endTime = SystemClock.elapsedRealtime();

    log("isCaptivePortal: isSuccessful()=" + result.isSuccessful()
            + " isPortal()=" + result.isPortal()
            + " RedirectUrl=" + result.redirectUrl
            + " isPartialConnectivity()=" + result.isPartialConnectivity()
            + " Time=" + (endTime - startTime) + "ms");

    return result;
}
相关推荐
QING61820 小时前
使用ADB分析CPU性能 —— 基础指南
android·前端·app
大白要努力!20 小时前
Android图片预览功能实战:从需求到上线的完整方案
android·viewpager·图片预览·实战记录·photoview
如此风景1 天前
kotlin协程学习小计
android·kotlin
轩情吖1 天前
MySQL初识
android·数据库·sql·mysql·adb·存储引擎
Sun_gentle1 天前
android studio创建flutter项目
android·flutter·android studio
我命由我123451 天前
在 Android Studio 中,新建 AIDL 文件按钮是灰色
android·ide·android studio·安卓·android jetpack·android-studio·android runtime
音视频牛哥1 天前
Android平台RTMP/RTSP超低延迟直播播放器开发详解——基于SmartMediaKit深度实践
android·人工智能·计算机视觉·音视频·rtmp播放器·安卓rtmp播放器·rtmp直播播放器
麻瓜生活睁不开眼1 天前
Android 14 开机自启动第三方 APK 全流程踩坑与最终解决方案(含 RescueParty 避坑)
android·java·深度学习
轩情吖1 天前
MySQL库的操作
android·数据库·mysql·oracle·字符集·数据库操作·编码集