MAC 随机化类型
Android 框架使用两种类型的 MAC 随机化:持久随机化和非持久随机化。如果用户禁用 MAC 随机化,则使用出厂 MAC 地址。
当设备关联到 Wi-Fi 网络时,Android 会确定要使用的 MAC 随机化类型。默认情况下,Android 使用持久随机化。从 Android 12 开始,Android 在以下情况下使用非持久随机化:
- 网络建议应用程序通过
WifiNetworkSuggestion.Builder#setMacRandomizationSetting
API 指定对网络使用非持久随机化。 - 该网络是一个未遇到强制门户的开放网络,并且
config_wifiAllowEnhancedMacRandomizationOnOpenSsids
覆盖设置为true
。默认情况下禁用此覆盖(设置为false
)。
持续随机化
启用 MAC 随机化功能后,Android 默认使用持久随机化类型。 Android 根据网络配置文件的参数(包括 SSID、安全类型或 FQDN(适用于 Passpoint 网络))生成持久的随机 MAC 地址。此 MAC 地址在出厂重置之前保持不变。如果用户忘记并重新添加 Wi-Fi 网络,MAC 地址不会重新随机化,因为 MAC 地址取决于网络配置文件的参数。
在网络依赖 MAC 地址的持久性为用户提供有用功能的情况下,持久性 MAC 地址是必要的,例如,记住设备并允许用户按预期绕过登录屏幕,或启用家长控制。
对于 Android 10 和 11,框架在启用 MAC 随机化时对所有网络使用持久随机化。
非持续随机化
在 Android 12 或更高版本中的某些网络使用的非持久随机化类型下,Wi-Fi 模块在每次连接开始时重新随机化 MAC 地址或框架使用现有的随机化 MAC 地址连接到网络。 Wi-Fi 模块在以下情况下重新随机化 MAC 地址:
- DHCP 租用期限已过期,并且自设备上次从该网络断开连接已过去 4 小时以上。
- 网络配置文件的当前随机 MAC 是 24 小时前生成的。 MAC 地址重新随机化仅在新连接开始时发生。 Wi-Fi 不会为了重新随机化 MAC 地址而主动断开连接。
如果这些情况都不适用,则框架使用先前随机分配的 MAC 地址连接到网络。
原文:https://source.android.google.cn/devices/tech/connect/wifi-mac-randomization-behavior?hl=zh-cn