Android 13.0 Wi-Fi如何使用固定mac地址,禁用随机mac地址,以及framework 实现原理的分析

一、概述

最近在看android wifi mac地址相关的一些内容,发现网上对android 13的 wifi framework 层代码分析较少,因此写下了这篇关于wifi mac地址分析的文章。
文章主要包括以下几部分:

  • 如何禁用wifi的随机mac地址,使用wifi自带的固定mac地址。
  • 讲解wifi mac地址相关的代码,弄明白函数之间的调用关系。
  • 简单画了关于wifi mac地址的函数调用关系。

二、禁用随机mac地址的方法

关于mac地址,android 13有三种模式:

  • 使用出厂自带的mac地址。
  • 使用持久的随机mac地址。
  • 使用随机的mac地址,也是android 13默认的方式。

下面将以AP功能进行讲解。

1、 禁用随机mac地址,使用出厂自带的mac地址方法

这个比较简单,直接修改xml配置就可以了。
配置文件所在位置:packages/modules/Wifi/service/ServiceWifiResources/res/values/config.xml

	<!-- Indicates that AP mode MAC randomization is supported on this device -->            
<bool translatable="false" name="config_wifi_ap_mac_randomization_supported">true</bool>

直接将上面的true改为false,wifi 就会使用wifi自带的固定地址了。如下:

	<!-- Indicates that AP mode MAC randomization is supported on this device -->            
<bool translatable="false" name="config_wifi_ap_mac_randomization_supported">false</bool>

具体原理,后面会讲到。

2、使用持久化的随机mac地址方法

在WifiApConfigStore.java类中修改代码,修改的函数和内容如下:

/**                                                                                                 
¦* Return the current soft access point configuration.                                              
¦*/                                                                                                 
public synchronized SoftApConfiguration getApConfiguration() {
   
                                         
¦   if (mPersistentWifiApConfig == null) {
   
                                                             
¦   ¦   /* Use default configuration. */                                                            
¦   ¦   Log.d(TAG, "Fallback to use default AP configuration");                                     
¦   ¦   persistConfigAndTriggerBackupManagerProxy(                                                  
¦   ¦   ¦   ¦   updatePersistentRandomizedMacAddress(getDefaultApConfiguration()));                 
¦   }                                                                                               
¦   SoftApConfiguration sanitizedPersistentconfig =                                                 
¦   ¦   ¦   sanitizePersistentApConfig(mPersistentWifiApConfig);                                    
    //追加的代码 开始                                                                               
¦   SoftApConfiguration.Builder convertedConfigBuilder =                                            
¦   ¦   ¦   new SoftApConfiguration.Builder(sanitizedPersistentconfig);                             
    convertedConfigBuilder.setMacRandomizationSetting(SoftApConfiguration.RANDOMIZATION_PERSISTENT);
    sanitizedPersistentconfig = sanitizedPersistentconfig.build();                                  
    //追加的代码 结束                                                                               
¦   if (!Objects.equals(mPersistentWifiApConfig, sanitizedPersistentconfig)) {
   
                         
¦   ¦   Log.d(TAG, "persisted config was converted, need to resave it");                            
¦   ¦   persistConfigAndTriggerBackupManagerProxy(sanitizedPersistentconfig);                       
¦   }                                                                                               
                                                                                                    
¦   if (mForceApChannel) {
   
                                                                             
¦   ¦   Log.d(TAG, "getApConfiguration: Band force to " + mForcedApBand                             
¦   ¦   ¦   ¦   + ", and channel force to " + mForcedApChannel);                                    
¦   ¦   return mForcedApChannel == 0                                                                
¦   ¦   ¦   ¦   ? new SoftApConfiguration.Builder(mPersistentWifiApConfig)                          
¦   ¦   ¦   ¦   ¦   ¦   .setBand(mForcedApBand).build()                                             
¦   ¦   ¦   ¦   : new SoftApConfiguration.Builder(mPersistentWifiApConfig)                          
¦   ¦   ¦   ¦   ¦   ¦   .setChannel(mForcedApChannel, mForcedApBand).build();                       
¦   }                                                                       

相关推荐

  1. Android10禁用wifi随机mac地址固定mac地址

    2024-02-05 17:56:01       21 阅读
  2. Android 10 实现随机分配 MAC 地址

    2024-02-05 17:56:01       35 阅读
  3. IP地址MAC地址区别与联系

    2024-02-05 17:56:01       34 阅读
  4. vue获取用户mac地址

    2024-02-05 17:56:01       7 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-02-05 17:56:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-02-05 17:56:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-02-05 17:56:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-02-05 17:56:01       20 阅读

热门阅读

  1. MATH122 Math

    2024-02-05 17:56:01       29 阅读
  2. Android13 系统源码适配安装可卸载的三方apk应用

    2024-02-05 17:56:01       26 阅读
  3. [EFI]DELL-7472电脑 Hackintosh 黑苹果efi引导文件

    2024-02-05 17:56:01       30 阅读
  4. 数据结构小练兵

    2024-02-05 17:56:01       28 阅读