SoftApHelper
SoftApHelper copied to clipboard
SoftAp static server IP(v4) for Android P-T (Xposed)
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+
功能
- 固定IP地址 (Android 9+)
- 隐藏热点类型 (Android 10+)
- 锁定5G信道和频宽 (Android 13+)
注意
网络前缀冲突会导致网络连接失败(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
指定作用域(已配置推荐作用域)
安卓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信道
原理
固定热点IP-Hook点
安卓9
com.android.server.connectivity.tethering.TetherInterfaceStateMachine
的getRandomWifiIPv4Address
函数。
TetherInterfaceStateMachine.java#259
private String getRandomWifiIPv4Address()
安卓10
android.net.ip.IpServer
的getRandomWifiIPv4Address
函数。
private String getRandomWifiIPv4Address()
安卓11
android.net.ip.IpServer
的requestIpv4Address
函数。
private LinkAddress requestIpv4Address()
由于该函数还被用于其他方式的网络共享及更换前缀,所以需要判断网络类型(mInterfaceType == TETHERING_WIFI
)和调用者(遍历堆栈查找configureIPv4
),最后进行替换。
安卓12
android.net.ip.IpServer
的requestIpv4Address
函数。
private LinkAddress requestIpv4Address(final boolean useLastAddress)
安卓13
Hook点同安卓12
private LinkAddress requestIpv4Address(final boolean useLastAddress)
安卓14
Hook点同安卓12
private LinkAddress requestIpv4Address(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;
}
固定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频段为特定信道。
手机重启后可能需要手动指定。