我用手机连接 WIFI ,发现随机生成 Mac 地址是默认开启的。
如果关闭了 随机 MAC 地址 功能,手机就用 设备出厂的 MAC 地址 了,就这么简单。
为何手机需要随机 MAC 地址?这个问题会变得更有意义。
手机出厂的 MAC 地址, 48 个 bit 位, 6 个 byte 。
C4:AC:AA :5E:9B:28
谁家的?
Apple 的。
00:0c:29 :8e:6e:8d
谁家的?
Vmware 的。
怎么知道的 ?
MAC 地址的高 32bit 位,即上文的 C4:AC:AA , 00:0c:29 , 这些 prefix 代表 organizationally unique identifier (OUI) ,分配给 Apple 、 Vmware 。
使用手机访问 Wi-Fi 时,无线信号是在开放( Open )空气介质里传播的。这里 open 意思是,方圆 100 米以内的人是有可能抓到你的 packet 的。
虽然 Wi-Fi 网络大多是加密的,但是 Wi-Fi 的二层头是不加密的,意味着你的 MAC 地址就暴露了。 如果不使用随机 MAC 地址,手机会一直使用出厂的、一成不变的 MAC 地址,这就给第三方跟踪你提供了便利。
如果使用随机 MAC 地址,下次连接 Wi-Fi 使用一个和上次连接不一样的 MAC 地址,甚至虚假的 OUI 编号,第三方跟踪你的难度就大大提升了。
在一个 Wi-Fi 网络里,多个手机有可能使用相同的随机 MAC 地址,从而造成冲突吗?
有这个可能,但概率极其小,小到可以忽略不记。
如果真的产生这种小概率事件,会发生什么?
任何手机要想上网,必须要 associate 到无线路由器上的。
如果老王已经用 MAC = 0000.0000.1234 连上了路由器。
此时,老李也想用 MAC = 0000.0000.1234 连接路由器,猜猜路由器会怎么做?
路由器内心独白: MAC = 0000.0000.1234 对应的手机,目前的状态 class 3 (bind) 。怎么又进来一个 class 1 的 authenticate 报文,状态机不对啊! 按理说,应该给他一个 de-authenticate 报文踢他下线。可是那么一搞,把老王也干下线了,不妥。怎么办?不理他,当作什么也没有发生!
老李的手机,没有收到 authenticate reply 报文,心里很着急,来自路由器的周期信标 beacon 是可以收到的,说明路由器是在该信道,也是工作着的,为什么不理我呢?
但还是重传了几次 authenticate 报文直到放弃。直到下次 retry 定时器超时,老李手机又一次尝试,这次老李的手机选择了另外一个随机 MAC 地址,和老王不一样的 MAC 地址,终于等来了来自路由器的 Reply ,老李
评论
发表评论