从 Android 8.0 开始,Android 设备在探测新网络但未与网络关联时,会使用随机 MAC 地址。在 Android 9 中,您可以启用开发者选项(默认情况下禁用)以使设备在连接到 Wi-Fi 网络时使用随机 MAC 地址。
在 Android 10 中,默认情况下为客户端模式、SoftAp 和 Wi-Fi Direct 启用 MAC 随机化。
MAC 随机化可防止监听器使用 MAC 地址构建设备活动历史记录,从而提高用户隐私。
此外,MAC 地址在 Wi-Fi Aware 和 Wi-Fi RTT 操作中也会被随机化。
有关详细信息,请参阅 MAC 随机化行为。
实现
要在您的设备上实现 MAC 随机化
与 Wi-Fi 芯片供应商合作以实现以下 HAL 方法
IWifiStaIface#setMacAddress
:配置接口的 MAC 地址。默认实现会关闭接口、更改 MAC 地址,然后重新启动接口。IWifiStaIface#getFactoryMacAddress
:使用ioctl
调用获取wlan0
的出厂 MAC 地址。ISupplicantP2pIface#setMacRandomization
:在 supplicant 中设置 P2P MAC 随机化开启/关闭。
在 Settings
config.xml
中将config_wifi_connected_mac_randomization_supported
设置为true
(这可以在设备自定义叠加层中完成)。- 此标志用于控制是否启用客户端模式 MAC 随机化。
在 Settings
config.xml
中将config_wifi_p2p_mac_randomization_supported
设置为true
(这可以在设备自定义叠加层中完成)。- 此标志用于控制是否启用 Wi-Fi Direct MAC 随机化。
使用 验证 中描述的方法测试您的实现。
系统 UI 必须
- 具有为每个 SSID 启用或禁用随机化的选项。
- 默认情况下,为所有新添加的网络启用 MAC 随机化。
使用 Settings UI 的 参考实现 来实现新的提示。
运行 Android 9 或更低版本的设备可能不支持 Wi-Fi MAC 随机化。当将此类设备升级到 Android 10 时,可以通过在 Wi-Fi 供应商 HAL make 文件中将 WIFI_HIDL_FEATURE_DISABLE_AP_MAC_RANDOMIZATION
标志设置为 true 来禁用 Wi-Fi MAC 随机化功能。
验证
要验证该功能是否按预期工作,请运行手动测试
- 通过检查设备叠加层中
config_wifi_connected_mac_randomization_supported
是否设置为true
,验证 MAC 随机化是否在设备上启用。 - 连接到 Wi-Fi 网络。
- 点按网络以转到“网络详情”页面。验证 MAC 随机化已开启。验证显示的 MAC 地址是随机 MAC 地址,其本地生成位设置为 1,多播位设置为 0。
- 关闭 MAC 随机化。连接到同一网络,并验证是否正在使用出厂 MAC 地址。
- 通过在“网络详情”页面上点按忘记来删除网络。
连接到同一网络,并验证是否正在使用相同的随机 MAC 地址。
要在升级到 Android 10 或更高版本的 Android 10 之前的设备(能够支持 MAC 随机化)上测试 MAC 随机化
- 在运行 Android 9 或更低版本的设备上至少保存一个网络。
- 刷写 Android 10 系统镜像。
- 在 Wi-Fi 选择器中,验证所有已保存网络的 MAC 随机化均已关闭。
- 开启 MAC 随机化。连接到同一网络,并验证是否正在使用随机 MAC 地址。