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;
}
相关推荐
liang_jy20 小时前
Android SparseArray
android·源码
liang_jy21 小时前
Activity 启动流程扩展篇(一)—— startActivityInner 任务决策全解析
android·源码
NPE~1 天前
[App逆向]脱壳实战
android·教程·逆向·android逆向·逆向分析
木易 士心1 天前
别再只会用 drawCircle 了!一文搞懂 Android Canvas 底层机制
android
AtOR CUES1 天前
MySQL——表操作及查询
android·mysql·adb
怣疯knight1 天前
安卓App无法增加自定义图片作为图标功能
android
jinanwuhuaguo1 天前
OpenClaw联邦之心——从孤岛记忆到硅基集体潜意识的拓扑学革命(第二十三篇)
android·人工智能·kotlin·拓扑学·openclaw
Gary Studio1 天前
安卓HAL C++基础-命名域
android
诸神黄昏EX1 天前
Android Google XTS
android
eSsO KERF1 天前
MySQL Workbench菜单汉化为中文
android·数据库·mysql