传统的 IP 地理定位服务依赖 WHOIS 注册信息、区域互联网注册管理机构(RIPE、ARIN 等)的数据馈送,以及众包数据源。这类方法的核心假设是:IP 地址的注册信息与其实际物理位置存在对应关系。然而,随着 VPN 和代理服务的普及,这一假设正在失效。大量 VPN 提供商通过向区域注册管理机构注入虚假的位置数据,人为伪造 IP 的地理归属,从而绕过基于地理位置的内容限制。这种做法使得传统数据库的准确性大打折扣,尤其是对于需要高精度定位的场景 —— 例如金融风控、广告投放、或网络性能优化 —— 错误的定位可能导致严重的业务偏差。
为了解决这一困境,ipinfo 等商业服务采用了「主动探测」策略:构建大规模的探针网络,从全球数百个节点对目标 IP 执行 traceroute 和 ping 测量,通过往返时间(RTT)延迟的三角定位来推断其物理位置。延迟测量的核心逻辑非常直观 —— 物理距离越近,网络跳数越少,端到端延迟通常越低。通过比较从不同地理位置发起的测量结果,延迟最低的探测点往往与目标 IP 位于同一自治系统或地理区域。这一方法不依赖注册信息的可信度,而是基于网络本身的物理特性,因此在对抗位置伪造方面具有天然优势。
Globalping 是一个开源的社区驱动项目,允许用户自托管基于容器的探针,这些探针汇聚成一个全球分布的测量网络。目前该网络已部署超过 3000 个探针,涵盖六大洲的主要国家和地区。对于希望复现 ipinfo 延迟定位思路的开发者而言,Globalping 提供了一个现成的、可编程的探测后端。jimaek 基于 Globalping 的 TypeScript SDK 开发了一款 CLI 工具 geolocation-tool,它通过分阶段的测量策略实现从国家到城市的逐级定位,无需自建探针网络即可获得商业级定位能力的子集。
该工具的算法设计采用了「由粗到细」的四阶段定位流程。第一阶段检测目标 IP 所在的大陆:从每个大陆各选取 5 个探针发起测量,延迟最低的大陆被标记为候选区域。这一步的探针消耗极低(默认仅 30 次测量),但对于大多数 IP 而言已经足够准确 —— 除非目标恰好位于大陆边界的特殊路由节点。第二阶段检测国家:在第一阶段选中的大陆内部,从 50 个不同国家的探针发起测量,延迟最低的国家被认定为正确归属。默认的 50 探针限制是在测量精度与 API 速率配额之间取得的平衡 —— 未认证用户每小时可执行 250 次测量,单次测量最多 50 探针。
对于美国 IP,工具会增加额外的第三和第四阶段。第三阶段检测州:在美国各州分别选取探针测量,将延迟最低的州作为结果。第四阶段检测城市:在胜出的州 / 国家内,从尽可能多的城市探针中选取延迟最低的 3 个输出。值得注意的是,工具的 magic field 参数会自动根据目标位置调整探针分布,但在某些边缘情况下可能无法覆盖所有国家。例如,北美包含 43 个国家和地区,如果仅设置 50 探针上限,美国会占据大部分配额,导致加拿大、墨西哥等国的采样不足。解决这一问题需要手动指定国家列表并提高总体探针上限 —— 例如美国 200 探针、加拿大 20 探针、墨西哥 10 探针,但这会显著增加 API 调用量。
在测量协议的选择上,工具最初采用 ICMP ping,但发现大量网络会屏蔽 ICMP 流量。随后改用 traceroute 并分析最后一个可用跳的延迟 —— 即使目标主机阻止 ICMP,其上游路由器通常仍会响应,且物理上通常位于同一国家或地区。这一折中方案牺牲了部分精度(仅使用最后一跳而非全程路径),但换取了更高的成功率。对于需要更高置信度的场景,可以结合 TCP 和 UDP 协议的 traceroute,对多个端口进行探测,并利用最后若干跳的加权平均延迟来降低单一节点异常的影响。
对比传统 IP 数据库,延迟测量方法的优势在于抗伪造能力。传统数据库依赖注册信息,而延迟测量基于网络物理特性 ——VPN 提供商可以伪造注册信息,但无法改变信号在光纤中的传播速度。通过多节点的交叉验证,异常数据点会被自然过滤:例如,如果某个探针报告的延迟异常低或高,它在统计排序中会被自动降权。但延迟测量也存在明显局限:探针分布密度直接决定精度上限,在探针稀缺的偏远地区(如非洲内陆、小岛屿国家),测量结果的置信度会显著下降;此外,跨境光纤链路、卫星通信、或异常路由策略也可能引入偏差。
在实际部署中,监控要点包括三个维度:首先是测量成功率 —— 如果某个阶段的完成率持续低于 90%,可能意味着目标 IP 存在防火墙阻断或网络异常;其次是置信度评估 —— 工具会输出 Very High、Medium 等评级,这基于测量延迟的离散程度(标准差越小置信度越高);最后是 API 配额消耗 —— 默认配置下,定位一个美国 IP 需要约 230 次测量(30 大陆 + 50 国家 + 50 州 + 50 城市 × 2 城市输出 + 若干重试),未认证用户每小时仅能定位 1-2 个 IP,因此建议申请免费 token 以获得 500 次 / 小时的配额,或通过自托管探针获取被动积分。
参数调优的核心在于探针上限 --limit(或 -L)。提高该值可以改善偏远地区的精度,但会线性增加配额消耗。对于批量定位任务,建议先用默认参数快速筛选,再对置信度较低的 IP 单独提高探针上限复测。另一个实用技巧是在配置文件中预设常用国家列表,绕过 magic field 的自动分发逻辑,确保每个目标国家都有探针覆盖。对于需要城市级精度的场景,建议将城市阶段的上限提高至 100 以上,同时接受置信度可能下降的现实 —— 城市内部的延迟差异往往只有几毫秒,探针密度的微小变化就会改变排序结果。
总体而言,基于 Globalping 的延迟测量定位是一种轻量级、可验证的 IP 地理定位方案。它不依赖第三方数据库的信任链,通过主动探测揭示 IP 的真实网络拓扑。对于需要对抗位置伪造、或在 VPN / 代理环境下仍需准确识别的场景,这一方法提供了传统数据库无法替代的价值。其局限性则提醒我们:任何定位技术都受制于底层基础设施的覆盖,在探针稀缺的区域,精度天花板是客观存在的。
资料来源:
- Globalping CLI 与探针网络:https://globalping.io/cli
- geolocation-tool 源码与文档:https://github.com/jimaek/geolocation-tool
- 延迟定位原理与算法详解:https://blog.globalping.io/we-have-ipinfo-at-home-or-how-to-geolocate-ips-in-your-cli-using-latency/