很多时候,开发者需要知道用户的地理方位。

最简单的方法,就是查看用户的 IP 地址,它能够确定地理方位。

如果你不想暴露真实方位,需要使用技术手段,伪装自己的 IP 地址。

但是,这个事情不是那么简单,真实方位其实很难隐藏。

上周,Hacker News 论坛上,有人发帖,说他想不通,谷歌怎么知道他的位置。

他从美国去墨西哥出差,为了使用美国的银行服务,全程都用了 VPN,伪装后的 IP 地址是在美国。按理说,服务器根据他的 IP 地址,只会认为他在美国华盛顿州。

但是,等他回到美国,打开家里的电脑。(注意,是家里的电脑,从来没有离开过美国。)浏览器显示,他的位置在墨西哥,推送给他的广告都是西班牙语。

他困惑不解,谷歌怎么会知道,我的真实方位是在墨西哥呢?我没有暴露真实 IP 地址啊。

帖子的下面就有人指点他了:谷歌判断你的地理方位,不仅仅看 IP 地址,更重要的看你的路由器的 MAC 地址。

一般来说,路由器很少改变地理方位,买来后放在某个地方,它就会一直放在那里。很少有人带着路由器一起出门。

这意味着,只要知道你使用哪个路由器,根据路由器的方位,就可以推断出你的真实方位。

每个路由器的 MAC 地址都是独一无二,而且固定不变。因此,对于互联网公司来说,只要建一个数据库,收集路由器的 MAC 地址和所在地方位,就能知道用户的真实方位了。

谷歌、苹果和很多互联网公司都是这样干的。安卓系统和 Chrome 浏览器都有这种机制,获取用户正在使用的路由器 MAC 地址,然后调用用户机器的 GPS 判断方位,再把这些数据发给服务器。如果本机没有 GPS 功能,就根据 IP 地址推断方位。

因为将你的 IP 地址与路由器 MAC 地址相匹配,不是实时的,会有一个时间差,所以有时候你出门旅行,方位变了,但是谷歌还会显示以前的方位,要过一段时间以后才会纠正。

如果你真的想避免暴露自己的方位,需要使用剥离了谷歌服务的安卓系统(比如 GrapheneOS),或者剥离了谷歌服务的 Chrome 浏览器(即 Chromium)。

问题是很多 App 都偷偷收集这些数据,谷歌、苹果这样的大公司,至少是明着干,可能还有办法关掉。小公司是偷偷做,根本不告诉用户,完全防不胜防。

所以,在互联网上,想要隐藏自己的方位,其实非常难。如果电信服务商、操作系统、应用软件都设置了追踪机制,它们联合起来,我觉得几乎没有可能隐藏自己。