为什么 IP 地理定位的城市级精度有限
IP 地理定位的城市级精度有限,是因为 IP 地址记录的是网络注册和路由的位置,而不是设备的物理所在,所以国家级的答案通常可靠,而城市级的答案只是尽力而为的估计。理解这一差异,能让你判断哪些决策可以放心地交给 IP 查询来驱动。
为什么国家级可靠而城市级不然
IP 地址空间按层级分配。区域互联网注册管理机构将地址块分发给各组织,这些组织在分配记录中登记国家。路由则增加了第二个独立的佐证:在 BGP 中通告某个地址块的网络可以通过其 ASN 识别。这两个来源在国家上通常一致,因为大型网络在既定的国家范围内运营,而地址块很少更换国家。这就是国家成为大多数服务大部分时间都能判断正确的字段的原因。但它仍不完美,因为注册国家可能与基础设施所在地不同,跨国公司可能在其总部所在国注册地址块,却在别处使用。ASN 查询会显示某个地址背后网络的所有者和注册国家,有助于分析这些情况。
城市则是另一类断言。没有任何注册管理机构公布地址在何处使用,因此每个城市值都来自推断:注册线索、延迟测量、用户提交的更正,以及综合这些的商业或开放数据集。每种方法都有失效模式,这些推断在人口稠密地区的固定宽带上最强,其他情况下最弱。
哪些因素使城市结果偏离目标
有几种常见情形会切断地址与地点之间的联系:
- 移动网络。来自许多设备的流量通过可能离手机很远的网关出口,而该地址可能由成千上万的用户共享,所以显示的城市往往是网关所在的区域。
- 集中式路由。互联网服务提供商可能将整个地区的流量通过单个接入点路由,因此几个城镇的用户看起来都在同一座城市。
- VPN、代理和 Tor。可见的地址属于出口服务器,而该服务器按设计就位于与用户不同的地方。
- 云和托管地址。数据中心里的服务器位于数据中心所在之处,无论应用面向的受众是谁。
- 被重新分配的地址块。地址块在服务商和地区之间转移的速度快于位置数据被更正的速度,所以记录会过时。
- IPv6。较新的地址空间,其覆盖和更正通常较为稀薄;我们在 IPv6 地理定位精度中对此有所介绍。
商业数据库和免费数据库面临同样的根本问题,因为它们都是根据间接证据进行估计。各服务商之间的差异是真实存在的,但只是程度上的差异。当两家服务商对城市的判断不一致时,没有哪一家显然是对的。
围绕这一差距进行设计
实用的规则是让决策的精度与信号的精度相匹配。国家适用于内容授权、税务和合规默认值、语言默认值以及粗略的路由。城市适用于软性的个性化,例如用户可一键更正的预填天气位置。它不适用于任何答案错误代价高昂的场景:不要根据城市的猜测拒绝服务、断言某人的住址或做出法律判定。
利用网络上下文来判断对城市结果应有多少信任。如果地址属于数据中心或 VPN,位置描述的就是服务器,ipto 的查询以 is_datacenter、is_vpn 和 is_tor 标记这一点,VPN 与代理检查器在其结果页面上显示这些标记。如果 ASN 属于移动运营商,预计城市描述的是运营商的网关。公司查询和 IP whois 页面显示持有该地址块的组织,这是检验某个地址属于住宅、企业还是基础设施的良好依据。
在产品层面,应在精度重要时主动询问。浏览器自身的地理定位权限才是获取精确位置的正确工具,而用户自己输入的地址更好。ipto 的天气和地点页面遵循这一模式:它们先请求浏览器位置,仅在权限被拒绝时才回退到近似的 IP 位置。把 IP 估计视为用户可以覆盖的默认值。
使用 ipto 获取粗粒度位置
ipto 的 IP 查询返回国家、城市、ASN、组织以及上述标记,数据集每天刷新,威胁情报源每 6 小时刷新。它免费且无需注册,每天 1,000 次请求,因此你可以拿结果与自己的真实情况对比,例如来自告知了你位置的用户的地址,并衡量在你自己的流量中城市的匹配频率。这种测量比任何已公布的精度声明都更有价值。关于如何让数据类型与任务相匹配,请阅读 IP 情报与地理定位 API 的对比,字段定义见 API 文档。