为什么说 MAC 是一个存在严重漂移的 ID ?
前两天友盟君发了一篇关于《移动应用统计的基本原理及 UMID 方案》的博文,里面提到Mac 是一个典型的存在严重漂移的 ID,本文就来和大家探讨下 Mac 地址漂移的问题。欢迎拍砖。
MAC 地址共48位(6个字节),以十六进制表示。前24位由 IEEE 决定如何分配,后24位由实际生产该网络设备的厂商自行指定。其中,ff:ff:ff:ff:ff:ff是广播地址,01:xx:xx:xx:xx:xx 是多播地址,01:00:5e:xx:xx:xx是 IPv4 多播地址。
如果各位经历过在某些网络上 Android 手机死活链接不上去的情况,那极有可能就是路由器设置了 MAC 地址过滤,变化后的 MAC 地址不在白名单上。
出乎很多人的意料,部分机型 MAC 地址确实会发生变化。可以参考 Android 官方代码库的 Issue:
Issue 23330: Galaxy Nexus (VZW/LTE) wifi MAC address changes with every reboot
看到了吗, 居然每次启动都会导致 MAC 地址的变动。为什么会这样呢? 有好事者解释说最初 Google 和三星不想掏钱买 Mac 地址,某个光芒四射的伟大的程序员同学就写了个函数,随机生成 MAC 地址的后六位。
The offending kernel code: if ((tuna_mac_addr[4] == 0) && (tuna_mac_addr[5] == 0)) { srandom32((uint)jiffies); // rand_mac = random32(); // tuna_mac_addr[3] = (unsigned char)rand_mac; tuna_mac_addr[4] = (unsigned char)(rand_mac >> 8); tuna_mac_addr[5] = (unsigned char)(rand_mac >> 16); } memcpy(buf, tuna_mac_addr, IFHWADDRLEN);
这部分的 kernel code 估计有被别的厂家 copy 过去,造成别的手机也有同样的问题。
如果不考虑 spam 的影响,这部分数据应该和 ROM 及机型相关。如果某一机型的一个手机有问题,这一机型的所有手机都有类似问题。
另有 Android 开发者社区的调查也可以证明这个结论
===============================================================================
友盟,中国最专业、最有数据凝聚力的的移动开发者服务平台。致力帮开发者提供从开发到运营的“一站式解决方案,提供移动应用统计分析、社会化分享组件、消息推送、自动更新、用户反馈等多项服务,助力开发者更省时、省力地开发和运营。
友盟主页:www.umeng.com
友盟官方微博:http://weibo.com/umengcom
欢迎关注友盟官方微信,微信号:umengcom