Android13分享热点设置安全性为wpa3

Android13分享热点设置安全性为wpa3

文章目录

  • Android13分享热点设置安全性为wpa3
    • 一、前言
        • 热点WPA3加密类型是需要底层硬件支持的。
        • Wifi WPA3 和 热点 WPA3 是不一样的
        • 分享初衷
    • 二、代码分析
      • 1、应用代码中热点设置WPA3 加密格式
        • 报错部分日志信息:
      • 2、系统代码分析
        • (1)热点重要工具类 ApConfigUtil.java
        • (2)Wifi、热点服务实现具体逻辑类 WifiServiceImpl.java
        • (3)继续热点重要工具类 ApConfigUtil.java
        • (4)修改wifi相关res属性
        • (5)WPA3 热点开启成功,但是其他设备无法连接日志
        • (6)WPA1 热点开启成功,但是其他设备正常连接日志
    • 三、Android加密类型介绍
      • 1、Android11 网络加密类型
      • 2、Android11 Wifi 加密类型代码中的定义
      • 3、Android13 Wifi 加密类型代码中的定义
      • 4、Android11 热点加密类型定义
      • 5、Android13 热点加密类型定义
    • 四、总结
      • 1、热点开启流程
      • 2、WPA3 热点加密类型系统上层适配

一、前言

Android 网络加密类型WPA3,比WPA和WPA2 安全性强一下;

有些客户强制要求支持WPA3,那么就需要系统进行一些适配了。

Android手机上热点分享显示的安全性部分手机可以选择WPA3,

比如红米12(Android12),一加Ace2(Android13);

但是其他很多手机都没有选择加密类型,比如Nova6(Android12)、红米(Android10),谷歌Piex4(Android13)。

从这里大致可以猜到:

热点WPA3加密类型是需要底层硬件支持的。

如果只是系统上层简单适配一下就行,估计大部分手机都是会支持WPA3热点的了。

并且热点WPA3 估计是Android11之后的系统才存在的加密类型,

查看了Android9的代码不存在相关属性的判断。

从Android11-13 系统Framework代码看,上层也是有相关属性需要适配,

但是发现上层适配后,可以打开WPA3加密类型的热点,

但是其他安卓设备无法连接这个WPA3加密类型的网络!

从日志看不出具体原因?底层/硬件需要如何适配也还不清楚。

Wifi WPA3 和 热点 WPA3 是不一样的

之前也有Wifi WPA3 加密类型相关分析:

https://blog.csdn.net/wenzhi20102321/article/details/126219495

这里大概介绍一下区别:

Wifi WPA3 : 指的是Android设备 支持连接WPA3 类型的Wifi 网络,这个只需要适配连接Wifi 的应用代码即可;这个功能在Android11 之后,系统原生Framework和原生Settings默认都是支持的。

热点 WPA3 :指的是热点开启的加密类型是WPA3,其他手机搜到这个热点,限制的加密类型是WPA3类型。这个适配要系统适配,有点麻烦。

分享初衷

在普通网址和CSDN上搜索了一下,暂时没有搜索到热点WPA3相关的分析,不管是上层的还是底层的相关适配都是空白的。

但是这些种种,不妨碍我分享一下关于热点WPA3上层开发的知识。

本文虽然不能完全分析到wpa3热点分享实现,但是对上层的开发和研究是有一定的价值的。

二、代码分析

1、应用代码中热点设置WPA3 加密格式

//构造热点信息对象
SoftApConfiguration.Builder configBuilder = new SoftApConfiguration.Builder();//热点名称configBuilder.setSsid(mHotspotName);//根据情况配置密码//加密情况才需要设置密码,如果热点不用密码不需要设置就行if (mSecurityType != 0) { //密码类型1:WPA,2:WPA3(过度),3:WPA3configBuilder.setPassphrase(mPassword, mSecurityType);}//设置信道和wifi类型,信道值可以根据情况设置if (mChanel != 0) {configBuilder.setChannel(mChanel, mBand);} else {configBuilder.setBand(mBand);}SoftApConfiguration softApConfiguration = configBuilder.build();//设置热点信息
mWifiManager.setSoftApConfiguration(softApConfiguration);//启动热点mConnectivityManager.startTethering(ConnectivityManager.TETHERING_WIFI, true,mOnStartTetheringCallback, new Handler(Looper.getMainLooper()));

通过demo 测试,发现 setPassphrase 设置热点密码类型 mSecurityType 设置 2和3都是无法打开热点的!

报错部分日志信息:
logcat -c;logcat | grep -i -E "SoftApManager|ApConfigUtil"  //设置无密码加密格式,正常打开热点,日志
11-08 17:42:25.559   813  1073 D SoftApManager[ap0]: startSoftAp: band 2 iface ap0 country US
11-08 17:42:25.566   813  1073 E ApConfigUtil: Can not start softAp with band 6Ghz not supported. //这个不影响热点开启
11-08 17:42:25.578   813  1073 D SoftApManager[ap0]: Soft AP is started 
11-08 17:42:25.578   813  1073 D SoftApManager[ap0]: SoftAp is ready for use//设置wap3加密格式,加密类型为3,无法正常打开热点,日志:
11-08 17:42:46.527   813  1073 D SoftApManager[ap0]:  currentstate: StartedState
11-08 17:42:46.623   813  1073 D SoftApManager[ap0]: Soft AP is stopped
11-08 17:42:46.623   813  1073 D SoftApManager[ap0]: Timeout message canceled on ap0
11-08 17:42:46.624   813  1073 D SoftApManager[unknown]: SoftApInfo update null, isRemoved: false
11-08 17:42:49.673   813  1073 D SoftApManager[ap0]: startSoftAp: band 2 iface ap0 country US
11-08 17:42:49.685   813  1073 D ApConfigUtil: Error, SAE requires HAL support //热点打开失败关键,需要追一下 SoftApManager 和 ApConfigUtil 里面的代码
11-08 17:42:49.686   813  1073 D SoftApManager[ap0]: Unsupported Configuration detect! config = ssid = "AndroidAP_7983" 
11-08 17:42:49.686   813  1073 D SoftApManager[ap0]:  Passphrase = <non-empty> 
11-08 17:42:49.686   813  1073 D SoftApManager[ap0]:  HiddenSsid = false 
11-08 17:42:49.686   813  1073 D SoftApManager[ap0]:  Channels = {2=36} 
11-08 17:42:49.686   813  1073 D SoftApManager[ap0]:  SecurityType = 3 11-08 17:42:49.743   813  1073 D SoftApManager[ap0]: Soft AP is stopped
11-08 17:42:49.743   813  1073 E WifiActiveModeWarden: SoftApManager start failed!SoftApManager{id=6497707 iface=ap0 role=ROLE_SOFTAP_TETHERED}

设置加密类型2和3都是上面的报错!

重点报错信息:SAE requires HAL support,这也是导致WPA3 热点无法正常开启的原因!

了解过 wifi 加密类型都会知道 SAE 类型 就是 WPA3 网络加密类型。

2、系统代码分析

(1)热点重要工具类 ApConfigUtil.java

packages\modules\Wifi\service\java\com\android\server\wifi\util\ApConfigUtil.java

public static boolean checkSupportAllConfiguration(SoftApConfiguration config,SoftApCapability capability) {if (!capability.areFeaturesSupported(SoftApCapability.SOFTAP_FEATURE_WPA3_SAE)&& (config.getSecurityType()== SoftApConfiguration.SECURITY_TYPE_WPA3_SAE_TRANSITION|| config.getSecurityType() == 				 	SoftApConfiguration.SECURITY_TYPE_WPA3_SAE)) {Log.d(TAG, "Error, SAE requires HAL support"); //设置热点无法打开的关键!return false;}
。。。return true;
}

SECURITY_TYPE_WPA3_SAE_TRANSITION = 2;

SECURITY_TYPE_WPA3_SAE = 3;

config.getSecurityType() == 2 或者 3 ,并且 capability.areFeaturesSupported(SoftApCapability.SOFTAP_FEATURE_WPA3_SAE) 为false,就会触发这个条件。

所以重点是 capability 对象的分析,这个分析其实是有点复杂的,但是通过全局搜索+日志打印还是可以分析到的。

其实是 WifiServiceImpl.java 开启热点前会更新一下 相关数据。

关于系统代码怎么调用到 ApConfigUtil.checkSupportAllConfiguration,其实是热点开启的流程(最后总结有),SoftApManager.startSoftAp() 多个数据校验的时候调用的。

(2)Wifi、热点服务实现具体逻辑类 WifiServiceImpl.java

packages\modules\Wifi\service\java\com\android\server\wifi\WifiServiceImpl.java

        public SoftApCapability getSoftApCapability() {synchronized (mLock) {if (mSoftApCapability == null) {mSoftApCapability = ApConfigUtil.updateCapabilityFromResource(mContext);// Default country codemSoftApCapability = updateSoftApCapabilityWithAvailableChannelList(mSoftApCapability, mCountryCode.getCountryCode());}return mSoftApCapability;}}

有N多个地方调用了 getSoftApCapability() 方法,详细流程可以自己摸索一下。

可以看到 SoftApCapability 对象有进行复制和修改

//主要分析这个:
mSoftApCapability = ApConfigUtil.updateCapabilityFromResource(mContext);
//这个往后的流程还有N多个,这里不展开分析
mSoftApCapability = updateSoftApCapabilityWithAvailableChannelList(mSoftApCapability, mCountryCode.getCountryCode());
(3)继续热点重要工具类 ApConfigUtil.java

下面追踪一下 ApConfigUtil.java 的代码

packages\modules\Wifi\service\java\com\android\server\wifi\util\ApConfigUtil.java

    public static SoftApCapability updateCapabilityFromResource(@NonNull Context context) {long features = 0;if (isAcsSupported(context)) {Log.d(TAG, "Update Softap capability, add acs feature support");features |= SoftApCapability.SOFTAP_FEATURE_ACS_OFFLOAD;}if (isWpa3SaeSupported(context)) {Log.d(TAG, "Update Softap capability, add SAE feature support");features |= SoftApCapability.SOFTAP_FEATURE_WPA3_SAE;}
...return capability;}//看这里,终于看到了点有用的信息!一个res属性的判断!public static boolean isWpa3SaeSupported(@NonNull Context context) {return context.getResources().getBoolean(R.bool.config_wifi_softap_sae_supported);}

ApConfigUtil 这个热点工具类,是有封装了很多方法的,很多地方有调用到。

通过上面一顿分析,发现只要把 config_wifi_softap_sae_supported 设置成 true ,就可以在上层设置支持WPA3 热点功能。

(4)修改wifi相关res属性

packages\modules\Wifi\service\ServiceWifiResources\res\values\config.xml

修改属性内容:

    <!-- Wifi driver supports WPA3 Simultaneous Authentication of Equals (WPA3-SAE) for softap --><bool translatable="false" name="config_wifi_softap_sae_supported">true</bool> //默认false

里面还有很多热点相关的属性,不清楚是否需要修改!但是这个属性是一定要修改的。

(5)WPA3 热点开启成功,但是其他设备无法连接日志

通过res属性修改后,wpa3热点开启成功,但是其他手机无法连接,自身设备(分享WPA3热点的设备)报错:

这里是过滤 ap0 节点关键字的日志信息。

11-09 08:57:11.415   806  1471 I EthernetTracker: interfaceLinkStateChanged, iface: ap0, up: true
11-09 08:57:11.419   806  1047 E EthernetNetworkFactoryExt: interfaceLinkStateChanged: iface = ap0, up = true
11-09 08:57:11.428   611   611 I wificond: New station fa:fb:73:72:8c:a5 connected to hotspot using interface ap0
11-09 08:57:11.428   611   611 I wificond: Sending notifications for station add event
11-09 08:57:11.482   611   611 I wificond: Station fa:fb:73:72:8c:a5 disassociated from hotspot
11-09 08:57:11.483  6379  6379 I hostapd : ap0: STA fa:fb:73:72:8c:a5 IEEE 802.11: disassociated
11-09 08:57:17.880   806  1471 I EthernetTracker: interfaceLinkStateChanged, iface: ap0, up: true
11-09 08:57:17.880   806  1047 E EthernetNetworkFactoryExt: interfaceLinkStateChanged: iface = ap0, up = true
11-09 08:57:17.978   611   611 I wificond: New station 18:87:40:31:22:e6 connected to hotspot using interface ap0
11-09 08:57:17.978  6379  6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: associated
11-09 08:57:17.978   611   611 I wificond: Sending notifications for station add event
11-09 08:57:17.978  6379  6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: associated
11-09 08:57:18.003   611   611 I wificond: Station 18:87:40:31:22:e6 disassociated from hotspot
01-01 08:08:26.998     0     0 I [4 T758   ..] [wlan][758]saaFsmRunEventRxDeauth: (SAA EVENT) ucRoleIdx 1, name ap0, ifindex 18, dev_addr0a:cf:89:a6:44:28
11-09 08:57:18.003  6379  6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: disassociated
11-09 08:57:19.256   806  1478 I EthernetTracker: interfaceLinkStateChanged, iface: ap0, up: true
11-09 08:57:19.257   806  1047 E EthernetNetworkFactoryExt: interfaceLinkStateChanged: iface = ap0, up = true
11-09 08:57:19.270  6379  6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: associated
11-09 08:57:19.271   611   611 I wificond: New station 18:87:40:31:22:e6 connected to hotspot using interface ap0
11-09 08:57:19.271   611   611 I wificond: Sending notifications for station add event
11-09 08:57:19.271  6379  6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: associated
11-09 08:57:19.292   611   611 I wificond: Station 18:87:40:31:22:e6 disassociated from hotspot
01-01 08:08:28.287     0     0 I [4 T758   ..] [wlan][758]saaFsmRunEventRxDeauth: (SAA EVENT) ucRoleIdx 1, name ap0, ifindex 18, dev_addr0a:cf:89:a6:44:28
11-09 08:57:19.292  6379  6379 I hostapd : ap0: STA 18:87:40:31:22:e6 IEEE 802.11: disassociated

从上面日志未看出日志明显异常信息。

连接动作:“connected to hotspot using interface ap0”,这个日志倒是看到有多次,但是之后就没有明显的动作日志了。

那么对比开启wap热点,其他手机正常连接的日志看看吧。

(6)WPA1 热点开启成功,但是其他设备正常连接日志

正常连接的日志:

11-09 09:19:06.109 17222 17222 D wpa_supplicant: RTM_NEWLINK: ifi_index=18 ifname=ap0 wext ifi_family=0 ifi_flags=0x11043 ([UP][RUNNING][LOWER_UP])
11-09 09:19:06.112   806  1478 I EthernetTracker: interfaceLinkStateChanged, iface: ap0, up: true
11-09 09:19:06.112   806  1047 E EthernetNetworkFactoryExt: interfaceLinkStateChanged: iface = ap0, up = true
11-09 09:19:06.122   611   611 I wificond: New station fa:fb:73:72:8c:a5 connected to hotspot using interface ap0
11-09 09:19:06.122   611   611 I wificond: Sending notifications for station add event
11-09 09:19:06.122 18018 18018 I hostapd : ap0: STA fa:fb:73:72:8c:a5 IEEE 802.11: associated
11-09 09:19:06.250 18018 18018 I hostapd : ap0: AP-STA-CONNECTED fa:fb:73:72:8c:a5
11-09 09:19:06.250 18018 18018 I hostapd : ap0: STA fa:fb:73:72:8c:a5 WPA: pairwise key handshake completed (RSN)
11-09 09:19:06.251 18018 18018 I hostapd : ap0: EAPOL-4WAY-HS-COMPLETED fa:fb:73:72:8c:a5
11-09 09:19:06.252   806  1608 D HostapdHalAidlImp: onConnectedClientsChanged on ap0 / ap0 and Mac is fa:fb:73:72:8c:a5 isConnected: true
11-09 09:19:06.254   806  1037 D SoftApManager[ap0]: CMD_ASSOCIATED_STATIONS_CHANGED, Client: fa:fb:73:72:8c:a5 isConnected: true
11-09 09:19:06.255   806  1037 D SoftApManager[ap0]: The connected wifi stations have changed with count: 1: [WifiClient{mMacAddress=fa:fb:73:72:8c:a5mApInstanceIdentifier=ap0}] on the AP which info is SoftApInfo{bandwidth= 2, frequency= 2437,bssid=0a:cf:89:a6:44:28, wifiStandard= 4, mApInstanceIdentifier= ap0, mIdleShutdownTimeoutMillis= 600000}
11-09 09:19:06.256   806  1037 D SoftApManager[ap0]: rescheduleTimeoutMessageIfNeeded ap0, timeoutEnabled=true, isChargingfalse, clientNumber=1
11-09 09:19:06.256   806  1037 D SoftApManager[ap0]: Timeout message canceled on ap0
11-09 09:19:06.257  1226  1269 V WifiManager: SoftApCallbackProxy on mode 1, send onConnectedClientsChanged, changedInfo is SoftApInfo{bandwidth= 2, frequency= 2437,bssid=0a:cf:89:a6:44:28, wifiStandard= 4, mApInstanceIdentifier= ap0, mIdleShutdownTimeoutMillis= 600000} and clients are [WifiClient{mMacAddress=fa:fb:73:72:8c:a5mApInstanceIdentifier=ap0}]
11-09 09:19:06.258  1226  1269 V WifiManager: SoftApCallbackProxy on mode 1, send onConnectedClientsChanged(clients): [WifiClient{mMacAddress=fa:fb:73:72:8c:a5mApInstanceIdentifier=ap0}]

这个日志同样有 “connected to hotspot using interface ap0”,

随后有 hostapd、HostapdHalAidlImp、SoftApManager 相关日志,

从"isConnected: true",明显可以看到有其他设备连接上了分享的热点。

hostapd 是网络身份校验的逻辑代码, wpa_supplicant 模块处理。

HostapdHalAidlImp 上层是调用底层接口的实现,Android11 没有这个类,但是有类似的HostapdHal。

SoftApManager 是上层校验信息逻辑实现

wpa_supplicant 模块的代码,全部都是C/C++ 的代码,路径:

//原生路径
release\external\wpa_supplicant_8\
//部分芯片厂商路径,比如AMl的
release\vendor\amlogic\common\wifi_bt\wifi\wpa_supplicant_8\

这部分代码基本没有进行分析过,修改的也只修改过已有对策的代码。

到这里已经分析不下去了,网络身份校验的部分逻辑,有需求的自行分析。

同时发现,即使设置WPA3 热点开启成功,其他Android设备还是未显示WPA3类型的网络,

有的手机显示显示WPA,有的显示WPA2,具体原因不清楚是哪里的问题!!!

三、Android加密类型介绍

以前只分析过Android11 ,这里发现Android13 有些区别,记录一下。

1、Android11 网络加密类型

SECURITY_TYPE_OPEN = 0; //无密码
SECURITY_TYPE_WEP = 1; //比较旧的加密方式,基本很少用,不太安全更多文字介绍:https://blog.csdn.net/u013403237/article/details/50663790SECURITY_TYPE_PSK = 2; //目前常用包含WPA/WPA2更多文字介绍:https://www.jianshu.com/p/9316c433ec5f/SECURITY_TYPE_EAP = 3; //非常安全EAP 的类型,是一种企业验证的安全类型,EAP 全称叫 802.1X/EAP 他常常给误解成 802.11x。EAP 的意思就是可扩展认证协议的缩写。最常部署的 EAP 验证类型包括 EAP-MD-5、EAP-TLS、EAP-LEAP、EAP-TTLS、EAP-Fast、EAP-PEAP;所以EAP网络也是连接wifi参数最多的网络,还需要添加客户端和服务器端的证书安装。更多文字介绍:https://blog.csdn.net/hl1293348082/article/details/123888636SECURITY_TYPE_SAE = 4;SAE最早是802.11s中为mesh网络提出的基于password的认证和key生成协议[1]。在WPA2-PSK中,PMK就是PSK,直接来源于密钥;而SAE则保证任何STA pair(AP-STA,nonAP-STA)在不同的session都有不同的PMK,使用SAE认证的个人无线网络通常称为WPA3-PSK/WPA3-Personal。简单的说SAE,就是WPA2的升级,简称WPA3更多文字介绍:https://blog.csdn.net/qq_23087099/article/details/113921261SECURITY_TYPE_EAP_SUITE_B = 5;EAP网络的另一种加密形式,具体介绍查不出SECURITY_TYPE_OWE = 6;未查出相关介绍,在当前类中发现,入下介绍,Opportunististic (共产主义),大概是共享网络的一种加密格式吧。/*** Opportunististic Wireless Encryption*/public static final int OWE = 9;最后两种:SECURITY_TYPE_WAPI_X WAPI(无线网络WLANAuthenticationandPrivacyInfrastructure)是我国自主研发并大力推行的无线网络WLAN安全标准,
它通过了IEEE(注意,不是Wi-Fi)认证和授权,是一种认证和私密性保护协议,其作用类似于802.11b中的WEP,但是能提供更加完善的安全保护。

上面的加密类型都是基于Android11 进行搜索和总结的,Android13 上看了是有点区别的。

但是基本类型,WPA,EAP,SAE(WPA3)是不变的。

Android 加密类型的定义是在 WifiConfiguration.java

2、Android11 Wifi 加密类型代码中的定义

frameworks\base\wifi\java\android\net\wifi\WifiConfiguration.java

   /*** Set the various security params to correspond to the provided security type.* This is accomplished by setting the various BitSets exposed in WifiConfiguration.** @param securityType One of the following security types:* {@link #SECURITY_TYPE_OPEN}, //0* {@link #SECURITY_TYPE_WEP}, //1* {@link #SECURITY_TYPE_PSK}, //2* {@link #SECURITY_TYPE_EAP}, //3* {@link #SECURITY_TYPE_SAE}, //4* {@link #SECURITY_TYPE_EAP_SUITE_B}, //5* {@link #SECURITY_TYPE_OWE}, //6* {@link #SECURITY_TYPE_WAPI_PSK}, or //7* {@link #SECURITY_TYPE_WAPI_CERT} //8*/

3、Android13 Wifi 加密类型代码中的定义

packages\modules\Wifi\framework\java\android\net\wifi\WifiConfiguration.java

    /*** Security types we support.* @hide*/@Retention(RetentionPolicy.SOURCE)@IntDef(prefix = { "SECURITY_TYPE_" }, value = {SECURITY_TYPE_OPEN,SECURITY_TYPE_WEP,SECURITY_TYPE_PSK,SECURITY_TYPE_EAP,SECURITY_TYPE_SAE,SECURITY_TYPE_EAP_SUITE_B,SECURITY_TYPE_OWE,SECURITY_TYPE_WAPI_PSK,SECURITY_TYPE_WAPI_CERT,//下面几个是新增的SECURITY_TYPE_EAP_WPA3_ENTERPRISE,SECURITY_TYPE_EAP_WPA3_ENTERPRISE_192_BIT,SECURITY_TYPE_PASSPOINT_R1_R2,SECURITY_TYPE_PASSPOINT_R3,SECURITY_TYPE_DPP,})//下面是最后几个新增的加密类型的代码说明:/*** Security type for an OSEN network.* @hide*/public static final int SECURITY_TYPE_OSEN = 10;/*** Security type for a Passpoint R1/R2 network.* Passpoint R1/R2 uses Enterprise security, where TKIP and WEP are not allowed.* @hide*/public static final int SECURITY_TYPE_PASSPOINT_R1_R2 = 11;/*** Security type for a Passpoint R3 network.* Passpoint R3 uses Enterprise security, where TKIP and WEP are not allowed,* and PMF must be set to Required.* @hide*/public static final int SECURITY_TYPE_PASSPOINT_R3 = 12;/** Security type for Easy Connect (DPP) network */public static final int SECURITY_TYPE_DPP = 13;/*** This is used for the boundary check and should be the same as the last type.* @hide*/public static final int SECURITY_TYPE_NUM = SECURITY_TYPE_DPP;

具体加密类型不做分析,有兴趣的可以自己看看。

热点的加密类型,没有那么多,但是也在慢慢增加,估计是要一定的协议和硬件支持。

热点加密类型是定义在 SoftApConfiguration.java

4、Android11 热点加密类型定义

frameworks\base\wifi\java\android\net\wifi\SoftApConfiguration.java

    /*** The operating security type of the AP.* One of the following security types:* {@link #SECURITY_TYPE_OPEN}, //0* {@link #SECURITY_TYPE_WPA2_PSK}, //1* {@link #SECURITY_TYPE_WPA3_SAE_TRANSITION}, //2 , TRANSITION 是过度的意思* {@link #SECURITY_TYPE_WPA3_SAE} //3*/

5、Android13 热点加密类型定义

packages\modules\Wifi\framework\java\android\net\wifi\SoftApConfiguration.java

    /*** The operating security type of the AP.* One of the following security types:* {@link #SECURITY_TYPE_OPEN},  //1* {@link #SECURITY_TYPE_WPA2_PSK}, //2* {@link #SECURITY_TYPE_WPA3_SAE_TRANSITION}, //3* {@link #SECURITY_TYPE_WPA3_SAE}, //4* {@link #SECURITY_TYPE_WPA3_OWE_TRANSITION}, //5* {@link #SECURITY_TYPE_WPA3_OWE} //6*/

四、总结

关于热点开启是如何走到 SoftApManager ,可以看下我之前对热点开启流程的分析:

1、热点开启流程

https://blog.csdn.net/wenzhi20102321/article/details/128473734

Android11 热点开启大致流程:

(1)ConnectivityManager.startTethering
(2)TetheringManager.startTethering(request, executor, tetheringCallback)
(3)TetheringService.TetheringConnector.startTethering
(4)Tethering.startTethering(request, listener);
//方法名变化,使用null 对象开启热点
(5)WifiManager.startTetheredHotspot(null /* use existing softap config */)
(6)WifiServiceImpl.startTetheredHotspot(@Nullable SoftApConfiguration softApConfig) 
//方法名再变化
(7)ActiveModeWarden.startSoftAp(apModeConfig);
(8)ActiveModeManager.start();ActiveModeManager manager = mWifiInjector.makeSoftApManager(listener, callback, softApConfig);listener.setActiveModeManager(manager);manager.start();
ActiveModeManager是接口类,会调用到SoftApManager.start()
(9)SoftApManager.startSoftAp()
(10)WifiNative.startSoftAp(mApInterfaceName, localConfigBuilder.build(), mSoftApListener)
(11)HostapdHal.addAccessPoint(ifaceName, config, listener::onFailure)
(12)根据硬件版本调用不同的接口实现:addAccessPoint_X_X

上面是Android11 上分析的代码逻辑,Android13 上应该是只有 HostapdHal 这个类不一样,其他流程是一样的。

2、WPA3 热点加密类型系统上层适配

需要设置系统 wpa3 相关 res属性 为true,如果不设置wap3 为true,是无法打开wpa3 热点的。

packages\modules\Wifi\service\ServiceWifiResources\res\values\config.xml

修改属性内容:

    <!-- Wifi driver supports WPA3 Simultaneous Authentication of Equals (WPA3-SAE) for softap --><bool translatable="false" name="config_wifi_softap_sae_supported">true</bool> //默认false

简单来说,本文就是为了说这个属性设置为 true, 其他相关知识都是附带介绍的。

系统上层适配后,还是有点bug,其他设备无法连接分享的wpa3 热点,

这个问题很大概率跟硬件模组相关,需要进一步分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/139301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows上运行yolov3代码详解(小白)

batch_normalize1 # 是否做BN 代码链接 环境配置 没有Anaconda的话可以安装下 首先创建虚拟环境&#xff0c;名称随意&#xff0c;版本3.9.我觉得挺好的 激活虚拟环境 conda activate 刚刚创建的环境名称 切换到requirements.txt目录下&#xff0c;直接vscode打开yolov3文件…

【操作系统面试题(32道)与面试Linux命令大全】

文章目录 操作系统面试题引论1.什么是操作系统&#xff1f;2.操作系统主要有哪些功能&#xff1f; 操作系统结构3.什么是内核&#xff1f;4.什么是用户态和内核态&#xff1f;5.用户态和内核态是如何切换的&#xff1f; 进程和线程6.并行和并发有什么区别&#xff1f;7.什么是进…

ThinkPHP图片处理之压缩图片大小,图片处理之图片水印(添加平铺文字水印,并设置文字之间的间距和文字的角度)

安装扩展 使用Composer安装图像处理类库 composer require topthink/think-image在对应的控制器内引入Image use think\Image;图片处理之压缩图片大小 public function upload(){$file request()->file(image);// 将前端传过来的图片移动到项目目录下$info $file->…

Redis学习笔记13:基于spring data redis及lua脚本list列表实现环形结构案例

工作过程中需要用到环形结构&#xff0c;确保环上的各个节点数据唯一&#xff0c;如果有新的不同数据到来&#xff0c;则将最早入环的数据移除&#xff0c;每次访问环形结构都自动刷新有效期&#xff1b;可以基于lua 的列表list结构来实现这一功能&#xff0c;lua脚本可以节省网…

idea怎么配置tomcat

要在IntelliJ IDEA中配置Tomcat&#xff0c;请按照以下步骤操作&#xff1a; 打开IntelliJ IDEA&#xff0c;点击File -> Settings&#xff08;或者使用快捷键CtrlAltS&#xff09;。 在设置窗口左侧导航栏中&#xff0c;选择Build, Execution, Deployment -> Applicati…

Redis的持久化机制和配置

Redis 的数据全部在内存里&#xff0c;如果突然宕机&#xff0c;数据就会全部丢失&#xff0c;因此必须有一种机制来保证 Redis 的数据不会因为故障而丢失&#xff0c;这种机制就是 Redis 的持久化机制。 Redis 的持久化机制有两种&#xff0c;第一种是RDB快照&#xff0c;第二…

web前端开发第4次Dreamweave课堂练习/html练习代码《出版界推出一批纪念抗美援朝胜利70周年主题图书》

目标图片&#xff1a; 文字素材&#xff1a; 出版界推出一批纪念抗美援朝胜利70周年主题图书 2023-08-01来源&#xff1a;新华社 为纪念抗美援朝战争胜利70周年&#xff0c;出版界集中推出了“抗美援朝亲历记丛书”《新中国立国之战——抗美援朝战争的回顾与思考》《毛泽东与…

C 语言 goto 语句

C 语言 goto 语句 在本教程中&#xff0c;您将学习在C语言编程中创建goto语句。此外&#xff0c;您还将学习何时使用goto语句以及何时不使用它。 goto语句使我们可以将程序的控制权转移到指定的label 标签。 goto语句的语法 goto label; ... .. ... ... .. ... label: sta…

发布一款将APM日志转换为Excel的开源工具

这几年有不少朋友向我咨询如何将APM日志转换为Excel&#xff0c;我之前的答复是先将日志转换为MATLAB的格式&#xff0c;然后用MATLAB导出为Excel。但是实际上不是每个人都会用MATLAB&#xff0c;并且处理数据也不是非要用MATLAB&#xff0c;更不是说用MATLAB了就显得专业、显得…

Leetcode—2471.逐层排序二叉树所需的最少操作数目【中等】(置换环解法!)

2023每日刷题&#xff08;二十七&#xff09; Leetcode—2471.逐层排序二叉树所需的最少操作数目 置换环解题思想 参考自网络 总交换次数 每一层最小交换次数之和 每一层元素个数 - 置换环数 实现代码 /*** Definition for a binary tree node.* struct TreeNode {* …

docker通过nginx代理tomcat-域名重定向

通过昨天的调试&#xff0c;今天做这个域名就简单了&#xff0c; 正常我们访问网站一般都是通过域名比如&#xff0c;www.baidu.com对吧&#xff0c;有人也通过ip&#xff0c;那么这个怎么做呢&#xff1f;物理机windows可以通过域名访问虚拟机linux的nginx代理转向tomcat服务…

【LeetCode刷题-二分查找】--658.找到K个最接近的元素

658.找到K个最接近的元素 方法一&#xff1a;二分查找双指针 假设数组长度为n&#xff0c;数组arr已经按照升序排序&#xff0c;可以将数组arr分为两部分&#xff0c;前一部分所有元素[0,left]都小于x&#xff0c;后一部分[right,n-1]都大于等于x&#xff0c;left与right都可以…

Windows10 安装 Ubuntu(WSL2)

Windows10 安装 Ubuntu(WSL2)&#xff1a;因为 Ubuntu(WSL1) 不具备调试功能&#xff0c;所以尽可能安装 Ubuntu(WSL2)。 具体流程如下&#xff1a; 1. 什么是WSL Windows Subsystem for Linux&#xff08;简称WSL&#xff09;&#xff0c;Windows下的 Linux 子系统&#xff…

YOLO目标检测——猫狗目标检测数据集下载分享【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;宠物识别、猫狗分类数据集说明&#xff1a;猫狗分类检测数据集&#xff0c;真实场景的高质量图片数据&#xff0c;数据场景丰富&#xff0c;含有猫和狗图片标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xm…

【Linux】初识进程地址空间

❤️前言 大家好&#xff01;这里是好久没有营业的大懒虫lion&#xff0c;今天要和大家聊的内容是我最近新学习的关于进程地址空间的相关知识。 正文 当我们使用C/C语言进行内存管理时&#xff0c;经常会接触到这样的一张图片&#xff1a; 它常常被我们称作程序地址空间&#…

druid连接池异常GetConnectionTimeoutException(原创)

问题描述 有天&#xff0c;测试同学突然反馈系统页面查询缓慢&#xff0c;影响使用&#xff0c;我查了日志报&#xff1a; druid 连接池异常 GetConnectionTimeoutException wait millis 9120, active 20, maxActive 20 creating 0 结论先行 经一系列排查&#xff0c;得出数…

面试10000次依然会问的【ThreadLocal】,你还不会?

ThreadLocal简介与基本概念 ThreadLocal&#xff0c;即线程局部变量&#xff0c;是Java语言中用于实现线程数据隔离的一个重要类。这种机制允许在多线程环境中&#xff0c;每个线程都有自己的变量副本&#xff0c;从而使得每个线程都可以独立地改变自己的副本&#xff0c;而不…

css实现div倾斜效果

效果如下&#xff1a; <!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title></head> <style> *{margin:0;padding: 0;} .box1{margin:30px 100px;width:100px;height:200px;background:blueviolet;} …

【信息安全原理】——传输层安全(学习笔记)

&#x1f4d6; 前言&#xff1a;为保证网络应用&#xff0c;特别是应用广泛的Web应用数据传输的安全性&#xff08;机密性、完整性和真实性&#xff09;&#xff0c;可以在多个网络层次上采取安全措施。本篇主要介绍传输层提供应用数据安全传输服务的协议&#xff0c;包括&…

使用 HTTP Client 轻松进行 API 测试

在开发过程中&#xff0c;我们经常需要测试 API 接口以确保其正常工作。JetBrains 的集成开发环境&#xff08;IDE&#xff09;如 CLion、IntelliJ IDEA、PyCharm 等&#xff0c;默认内置了 HTTP Client 插件&#xff0c;可以方便地进行API测试。本文将介绍如何使用HTTP Client…