/SoftApHelper

SoftAp static server IP(v4) for Android 9+; SoftAp type hide for Android 10+; SoftAp 5G channel and bandwidth lock for Android 13+ (Xposed)

Primary LanguageJava

SoftApHelper (Xposed)

SoftAp static server IP(v4) for Android 9+

SoftAp type hide for Android 10+

SoftAp 5G channel and bandwidth lock for Android 13+

功能

  1. 固定IP地址 (Android 9+)
  2. 隐藏热点类型 (Android 10+)
  3. 锁定5G信道和频宽 (Android 13+)

注意

网络前缀冲突会导致网络连接失败(Android 10及以下)或仍使用随机IP(Android 11及以上,日志提示isConflictPrefix)。

wifi热点为192.168.43.1,同时提供了192.168.1.1版本(43.1连不上的先试试这个)。

支持设置WIFIUSB蓝牙的热点IP(Android 11及以上)。

Type IP
USB 192.168.42.1
WIFI WIFI_HOST_IFACE_ADDR(43.1/1.1)
BlueTooth 192.168.44.1
P2P 192.168.49.1

安卓13+开启5G热点时,如果未指定5G信道(未指定单个channel或者使用allowedAcsChannels),模块将锁定频段为149,153,157,161,165,最大频宽为320MHZ(受硬件限制,实际可能只有80MHZ)。

如果需要锁定频段为其他范围(比如36,40,44),请使用VPNHotspot,填写5 GHz ACS 可选频段

下载

Release

作用域

推荐使用LSPosed指定作用域(已配置推荐作用域)

安卓11及以下

系统框架

安卓12及以上(以及部分安卓11设备)

注意:高版本LSPosed勾选Tethering失败是正常现象,不影响插件生效

系统框架(一般只钩这个就可以了,勾选Tethering是保险起见)

com.google.android.networkstack.tethering.inprocess

com.android.networkstack.tethering.inprocess

com.google.android.networkstack.tethering

com.android.networkstack.tethering

连接测试&问题反馈

开启热点后,手机端使用ifconfig命令查看IP(或usb连接电脑后,进入adb shell执行)。或使用其他机器连接热点后,ping 192.168.43.1

如果插件未生效,作用域可尝试勾选更多包名包含networkstack.tethering的应用。

若仍未生效,请上传设备执行ifconfig的结果,以及/apex/com.android.tethering/priv-app/下的apk到Issues

Todo

  • 自定义IP
  • 自定义生效的网络类型
  • 安卓12及以下自定义5G信道

原理

安卓9 固定Wifi热点IP (Xposed)

安卓10、11 固定Wifi热点IP (Xposed)

安卓12 固定Wifi热点IP (Xposed)

固定热点IP-Hook点

安卓9

com.android.server.connectivity.tethering.TetherInterfaceStateMachinegetRandomWifiIPv4Address函数。

TetherInterfaceStateMachine.java#259

private String getRandomWifiIPv4Address()

安卓10

android.net.ip.IpServergetRandomWifiIPv4Address函数。

IpServer.java#469

private String getRandomWifiIPv4Address()

安卓11

android.net.ip.IpServerrequestIpv4Address函数。

IpServer.java#645

private LinkAddress requestIpv4Address()

由于该函数还被用于其他方式的网络共享及更换前缀,所以需要判断网络类型(mInterfaceType == TETHERING_WIFI)和调用者(遍历堆栈查找configureIPv4),最后进行替换。

安卓12

android.net.ip.IpServerrequestIpv4Address函数。

IpServer.java#655

private LinkAddress requestIpv4Address(final boolean useLastAddress)

安卓13

Hook点同安卓12

IpServer.java#664

private LinkAddress requestIpv4Address(final boolean useLastAddress)

安卓14

Hook点同安卓12

private LinkAddress requestIpv4Address(final boolean useLastAddress)

隐藏热点类型

android.net.dhcp.DhcpServingParamsParcelExtsetMetered函数。

    /**
     * Set whether the DHCP server should send the ANDROID_METERED vendor-specific option.
     *
     * <p>If not set, the default value is false.
     */
    public DhcpServingParamsParcelExt setMetered(boolean metered) {
        this.metered = metered;
        return this;
    }

固定5G热点信道

方法1:使用本插件

(TODO)安卓12及以下:指定AP频段为特定信道。

安卓13+:如果开启5G热点时,未指定5G信道(单个channel或者allowedAcsChannels),锁定频段为149,153,157,161,165,频宽为320MHZ(受硬件限制,实际可能只有80MHZ)。

方法2:使用VPNHotspot

使用VPNHotspot设置系统热点配置。

安卓12及以下:指定AP频段为特定信道。

安卓13+:指定频段为5G,ACS可选频段为信道,或指定AP频段为特定信道。

手机重启后可能需要手动指定。

感谢

@mmfmkuang

@dsfgdadg