SoftAp static server IP(v4) for Android 9+
SoftAp type hide for Android 10+
SoftAp 5G channel and bandwidth lock for Android 13+
- 固定IP地址 (Android 9+)
- 隐藏热点类型 (Android 10+)
- 锁定5G信道和频宽 (Android 13+)
部分安卓14系统由于存在缓存,需要手动重新优化Tethering,模块才能生效
LSPosed-模块-SoftApHelper-长按Tethering-重新优化-重启手机
网络前缀冲突会导致网络连接失败(Android 10
及以下)或仍使用随机IP(Android 11
及以上,日志提示isConflictPrefix
)。
wifi热点为192.168.43.1
,同时提供了192.168.1.1
版本(43.1
连不上的先试试这个)。
支持设置WIFI
、USB
、蓝牙
的热点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 可选频段
。
推荐使用LSPosed
指定作用域(已配置推荐作用域)
系统框架
注意:高版本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。
由于涉及配置保存,需要适配不同的安卓系统版本(系统层面限制)以及Xposed版本(API),时间成本较高,该功能暂不考虑开发。
解决方法:自行使用MT管理器重编译dex,把192.168.43.1替换成目标IP
com.android.server.connectivity.tethering.TetherInterfaceStateMachine
的getRandomWifiIPv4Address
函数。
TetherInterfaceStateMachine.java#259
private String getRandomWifiIPv4Address()
android.net.ip.IpServer
的getRandomWifiIPv4Address
函数。
private String getRandomWifiIPv4Address()
android.net.ip.IpServer
的requestIpv4Address
函数。
private LinkAddress requestIpv4Address()
由于该函数还被用于其他方式的网络共享及更换前缀,所以需要判断网络类型(mInterfaceType == TETHERING_WIFI
)和调用者(遍历堆栈查找configureIPv4
),最后进行替换。
android.net.ip.IpServer
的requestIpv4Address
函数。
private LinkAddress requestIpv4Address(final boolean useLastAddress)
Hook点同安卓12
private LinkAddress requestIpv4Address(final boolean useLastAddress)
Hook点同安卓12(参数有变化,但函数名没变)
private LinkAddress requestIpv4Address(final int scope, final boolean useLastAddress)
android.net.dhcp.DhcpServingParamsParcelExt
的setMetered
函数。
/**
* 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;
}
(TODO)安卓12及以下:指定AP频段为特定信道。
安卓13+:如果开启5G热点时,未指定5G信道(单个channel或者allowedAcsChannels),锁定频段为149,153,157,161,165
,频宽为320MHZ
(受硬件限制,实际可能只有80MHZ
)。
使用VPNHotspot设置系统热点配置。
安卓12及以下:指定AP频段为特定信道。
安卓13+:指定频段为5G,ACS可选频段为信道,或指定AP频段为特定信道。
手机重启后可能需要手动指定。