苹果主要有两个问题,一个是苹果app无法读取苹果本身的mac 地址,另外一个是苹果手机从ios8开始在一定情况下会在发送的probe包中填写假的mac 地址(假 mac地址能够100%识别出来过滤掉,因此尽可能抓取真实mac地址即可),从ios9开始就更多的情况会发送假地址,所调假地址就是这十分钟可能发送的mac是1234,下十分钟可能发送的mac是5678,苹果这么做是希望能回避被跟踪。
要弄清这个问题,要理解什么是probe包,就是你的手机如果wifi没有关闭,你会发现一旦你回到家里,手机就会自动连接上你家里的wifi,这就是probe包的作用,你的手机会定时发送probe包,不同手机发送频率不同,probe包就是询问:周围的wifi ap的名字是什么?请回答。周围的ap回答后,你的手机会把回答的ap的 ssid 和之前手机存储的曾经连接过的wifi的ssid进行比对,一旦匹配,手机就会主动发起对那个ap的连接,这时你会发现已经连接上了wifi,在ap回答了手机的 probe 包问候后,如果手机发现该ap曾经连过,手机会发起其他类型的包,如association,authentication,data等,在这些包里面即便是ios9也没法填写假的mac地址的,因此只要探针能够探测到这些包,就还是能够探测到苹果手机的真实mac地址的。
那问题又来了,手机什么时候才发那些包呢?简单的讲,只要你的手机曾经连接过一些wifi热点,而你又走进了有这些wifi同样名字的环境就会发起这些包,即便密码不同,也会发起。比如你在上海连接过cmcc 这个公用wifi名字,然后到了北京一个商场,那里也有公用wifi cmcc,你的手机就会试图连接,就会发送那些包。
又比如一般员工都会连接公司的wifi,如果你探测的场合是办公室,那探测 ios mac地址一点问题都没有。同样道理,即便在大街上,也能探测到一定程度的ios 真地址。但比如一个刚出厂的ios 手机,一个wifi也没有连接过,这个时候一般你很难探测到它的真实地址。但具体何时发送什么类型包,情况比较复杂,但大多数时候还是会发送除了probe之外的包。
那什么样的探针能探测那些包呢?一般来说openwrt改装的,也就是既是路由器,又兼具探针能力的探针是没有可能探测到那些真实的ios mac 地址的,因为它只探测 probe包,除非这台手机连接了该改装的wifi,openwrt 才能收集到真实的ios mac地址。