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 |
| ETHERNET | 192.168.45.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;
}Hook点同安卓14
(TODO)安卓12及以下:指定AP频段为特定信道。
安卓13+:如果开启5G热点时,未指定5G信道(单个channel或者allowedAcsChannels),锁定频段为149,153,157,161,165,频宽为320MHZ(受硬件限制,实际可能只有80MHZ)。
使用VPNHotspot设置系统热点配置。
安卓12及以下:指定AP频段为特定信道。
安卓13+:指定频段为5G,ACS可选频段为信道,或指定AP频段为特定信道。
手机重启后可能需要手动指定。