返回概览 更多文章

网站能看到你的 MAC 地址吗?它们实际用的是什么

加载中……

在每一个讨论账号被封的帖子里,总会有人给出同一条建议:改掉你的 MAC 地址,他们就是靠它认出你的。这话听起来很有道理。MAC 地址在出厂时就烧录进了你的网卡,全球唯一,感觉正是网站第一个要抓的那种标识符。

可它恰恰也是网站唯一拿不到的那个标识符。原因藏在网站所能控制的一切之下:你的 MAC 地址从不越过你自己的路由器,而浏览器内部也没有任何东西会交出它。本页上的小工具偏要试上一试,并把网站实际看到的东西摆给你看。

一句话总结:网站看不到你的 MAC 地址,历史上的几个例外也早已被堵死。它只是一张本地投递标签,从你自己的路由器开始,每过一台路由器就被重写一次,而浏览器没有任何 API 会暴露它。VPN 碰不到它,因为这个地址从来就不在你的流量里。当一个平台封禁“你的设备”时,它真正钉住的是 cookie 和存储、你的 IP 地址,以及你的浏览器指纹。

你的 MAC 地址在第一跳就下车了

MAC 地址只回答一个问题:这个网络上的哪块网卡应该接收这一帧?当你的笔记本向某个网站发出请求时,它会把数据包裹进一个帧里,帧上盖着你的 MAC 作为源地址、你路由器的 MAC 作为目的地址。路由器把这个帧剥掉,留下数据包,再为下一程构建一个全新的帧,源地址换成它自己的。你和服务器之间的每一台路由器都会把同样的事再做一遍。等你的请求抵达时,上面的源 MAC 已经属于离服务器最近的那台路由器了。你的那一个,从来就没走出过你的客厅。

你的 MAC 地址止步于何处
  1. 你的设备
    把请求包进一个寄往路由器的帧里
    src MAC 3C:22:FB:9A:41:D6 你的
  2. 你的路由器 你的 MAC 的最后一站
    剥掉这个帧,为下一跳构建一个新的
    src MAC 9C:53:22:71:0B:E4 路由器的
  3. 你的 ISP,以及它之后的每一台路由器
    每一跳都用自己的地址再重写一遍
    src MAC 最后转发的那台路由器的
  4. 未暴露
    网站
    收到的是你的公网 IP 地址和请求头
    你的 MAC:不在数据包里
MAC 地址只是单个网段内的投递信息,每一跳都会被重写。你的设备写下的那一份,从来越不过你自己的路由器。

JavaScript 能拿到你的 MAC 地址吗?

不能,这一端和网络那一端一样,堵得严严实实。浏览器会通过 navigator 把你的语言和 CPU 核心数告诉任何脚本,WebGL 还会主动奉上你的 GPU 型号,全程不弹任何授权提示,可整个 Web 平台里就是不存在任何长得像 MAC 的东西。“用 JavaScript 获取 MAC 地址”这个问题,在 Stack Overflow 上挂着同一个答案已经快二十年了:拿不到,提问的人都被建议改为自己生成一个标识符。

为什么老论坛的回答说网站读得到

去搜这个问题,你现在仍能找到声称网站读得到的回答,前提是它的服务器上装了合适的“特殊脚本”。那些回答写在另一个时代的浏览器里。在插件时代,经过签名的 Java applet 可以调用 NetworkInterface.getHardwareAddress(),Internet Explorer 里的 ActiveX 控件干脆直接去问 Windows。这一整类漏洞如今已不复存在:Chrome 在 2015 年砍掉了插件支持,Firefox 是 2017 年,Internet Explorer 本身也在 2022 年退役。现代浏览器运行的任何东西,都再没有那种深入操作系统的触角。

另一个幽灵是 IPv6。最初的编址方案会用你的 MAC 拼出你公网 IPv6 地址的一部分,这种格式叫 EUI-64,等于你的硬件地址真真切切地装在每一个数据包里发了出去。这个隐私漏洞几乎立刻就被人意识到了:隐私扩展将它修复(2001 年的 RFC 3041,后来完善为 RFC 4941),各大主流操作系统也已经默认使用随机化地址多年。直接读取和间接泄露这两条路都已封死;说法与此相反的论坛帖子,只不过比这些修复更古老而已。

谁能看到你的 MAC 地址(以及你的手机为什么对他们撒谎)

在你所连接的那个网络上,你的 MAC 是完全可见的。你的路由器记录着它,同一个 Wi-Fi 上的每台设备都能看到它,运营这个 Wi-Fi 的人也一样:你的雇主、酒店、机场、咖啡店。当酒店的登录页按设备跟你打招呼时,那是网络的网关把自己知道的信息递给了自己的门户页面,而不是你的浏览器交出了什么。这是一个真实存在的追踪面。零售分析公司曾经靠手机广播的 Wi-Fi 探测帧在商场里一路尾随顾客,操作系统厂商正是因此才出的手。iOS 14 从 2020 年起给每个 Wi-Fi 网络分配各自的“专用地址”,Android 10 把按网络随机化设为默认,Windows 提供按网络的随机硬件地址,macOS 也在 Sequoia 里补上了这一课。应用失去权限还要更早:从 iOS 7 起,应用请求 MAC 得到的回复是 02:00:00:00:00:00,Android 6 玩的是同一套把戏。出了名的例外是 TikTok:《华尔街日报》抓到它借助一个绕开 Android 6 封锁的变通手段,在 Android 上持续收集 MAC 地址至少 15 个月。但那是一个应用在滥用操作系统权限,不是一个网站在读你的浏览器。

这一切防的都是网络运营者,而不是网站。网站从一开始就没拿到过这个地址。

VPN 能隐藏你的 MAC 地址吗?

不能,也根本不需要。VPN 加密你的流量,并换掉互联网看到的那个 IP 地址。而你的 MAC 活在你的笔记本和路由器之间的那一小段网络上,先于这一切发生,无论隧道在不在,它都走不了更远。有没有 VPN,你的路由器都看得到你的 MAC;有没有 VPN,网站都看不到。如果某家 VPN 服务商把“MAC 保护”当卖点来宣传,那它保护你免受的,是一件本来就没在发生的事。

网站确实能推断出关于 VPN 用户的一些事,只是那些泄露住在别处:时区、语言、IP 网段的所有者。我们在网站如何检测你的 VPN 一文里把这件事拆开讲过。

“设备封禁”真正钉住的是什么

这就说到了大多数人打听 MAC 地址的真正缘由:某个平台说你的设备被封了,而 MAC 是你叫得出名字的东西里听起来最像“设备”的一个。Snapchat 的 SS06“设备被封禁”页面、Roblox 的设备封锁、换了新账号也照样生效的论坛封禁。既然网站看不到你的 MAC,它抓住的到底是什么?

在网页这一侧,是三样东西。一个存储下来的标识符:某个早在封禁之前就写入的 cookie 或 localStorage 值,退出登录也删不掉它。你的 IP 地址,或它所属的整个网段。还有你的浏览器指纹:canvas 哈希字体列表、GPU 字符串、时区,拼合成一个完全不需要存储的标识符。这三样东西的寿命差别极大,而这恰恰是平台把它们同时全用上的原因。这也解释了为什么“设备封禁能封多久”没有唯一答案:cookie 那一半在清空存储时失效,IP 那一半在地址轮换时失效,指纹那一半则要等它底下的浏览器或硬件发生变化才会消失。

六样都叫“你的设备”的东西
  • MAC 地址
    从不离开你的本地网络,也不存在任何浏览器 API
    网站:看不见
  • 硬件序列号(HWID)
    由游戏里的内核级反作弊读取,网页永远读不到
    网站:看不见
  • 手机设备 ID
    由操作系统交给原生应用;Snapchat 封禁用的就是它
    网站:看不见
  • IP 地址
    随每次请求发出;换个网络或用 VPN 就会改变
    网站读得到
  • Cookie 与站点存储
    退出登录也还在;可在浏览器设置里清除
    网站读得到
  • 浏览器指纹
    清空存储、更换 IP 都不影响它
    网站读得到
网页侧的“设备封禁”就是下面三样的组合。上面三样属于网络、原生应用和内核驱动,这正是改 MAC 地址从来解不了封的原因。

原生应用和游戏完全是另一套玩法,而这两者总是被混为一谈。手机应用能从操作系统拿到平台设备 ID 和设备完整性认证,Snapchat 的设备封禁倚仗的正是这类东西。带内核级反作弊的 PC 游戏,Vanguard、Easy Anti-Cheat、BattlEye,会从操作系统内部读取主板和硬盘的序列号:那才是真正的 HWID 封禁。网页这些都做不到。一个网站能要到你的 GPU 型号字符串,就已经摸到了它对你的硬件所能了解的天花板,而且连这一点也是作为指纹面的一部分到手的,而不是一个序列号。

到底该怎么办

  1. 别再替网站解决 MAC 问题了。 这里根本无题可解。如果一个网站在你认为它不该认出你的时候仍然认出了你,那份“记性”存在于存储、你的 IP 或你的指纹里,而完整浏览器扫描会告诉你,你的浏览器正在交出其中哪些信号。
  2. 在不属于你的网络上开启 MAC 随机化。 这项功能防的正是那种威胁,开启毫无成本,而且在近几年的手机上它多半已经默认开着了。
  3. 如果你因为工作需要运营多个账号,真正把它们关联起来的是指纹,而徒手修补指纹只会制造出检测系统专门搜寻的那种自相矛盾。Incogniton 给每个配置文件配上各自一致的指纹和存储,那才是隔离真正发生的层面,全程用不着任何 MAC 修改器。

具体某个平台允不允许这样做,由它的规则说了算,动手之前先弄清楚。但无论你做什么决定,都请针对网站真正读得到的那些标识符去做。上方的小工具把它们一一列了出来,而 MAC 地址那一行,是任何页面都永远填不上的一行。

Incogniton 徽标

提升你的隐私保护

箭头