安卓MAC 随机化行为

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

请登录评论。