Skip to content

IP归属地到底是怎么查出来的?原理讲透

前两天一个刚转行做后端的朋友问我:你们天天说"IP归属地",这玩意儿到底是咋算出来的?总不可能是拿个望远镜看IP往哪儿走吧。

我笑了笑,给他讲了个大概。今天也整理出来,写成一篇文章。

先说结论

IP归属地查询,本质上就是查一张表——一张把"IP地址段"映射到"地理位置"的表。IP地址本身不带位置信息,它只是个编号,是人家分配给你的。真正有地理位置的是这张表,谁家的表准、谁家的表新,决定了查出来的结果靠不靠谱。

这张表是怎么来的?

IP地址是全球分配的,国际上有五大地区性注册机构(比如负责亚太的APNIC),它们手里有一份"哪个网段分给了谁"的原始记录。这是最底层的数据,只能精确到国家甚至大区。

但光有原始分配记录远远不够,因为运营商拿到网段后,还得告诉我们这些IP实际部署在哪个城市、哪条线路上。所以表要升级,来源大致有这几类:

  • 运营商公开信息:电信、联通、移动的骨干网IP段是相对稳定的,可以按省份城市去归档。
  • BGP路由公告:网络设备之间会交换路由信息,从里面能看出某个网段走的是哪家的线路,反推位置。
  • 自家监测点的探测:这就是很多查询服务"自建库"的核心了。在全国各地布节点,去测量某个IP的延迟、跳数,谁离得近就归谁。IP9 那句"自有网络监测点辅助测量",说的就是这件事。
  • 用户行为交叉验证:有些人主动开过定位,某些行为能反推出大致位置,再回来校正这张表。

为什么有人查得准、有人查得飘?

同一个IP,不同的接口可能给出不同的城市。这不奇怪,因为每家的表不一样:

  • 更新频率:IP段是动态调整的,三个月前的数据放到今天就可能是错的。
  • 粒度:有的只能到省,有的能到市,再精细点能到区县。
  • 对移动网络的特殊处理:手机基站分配的IP经常在省内、市内飘,如果服务商不针对蜂窝网做修正,查出来就会"看起来不对"。

顺带说个实用的:查询当前的IP,接口默认就能拿到;查指定IP,带上参数就行。比如 IP9 的接口就是这样:

https://ip9.com.cn/get?ip=58.30.0.0

不传IP参数就是查你自己。返回的字段里除了省市县,还有运营商、经纬度、IP类型这些,基本都是查这张表来的。

一点题外话

我见过不少人拿IP归属地当GPS用,觉得误差在几公里内。实际上大部分时候它只能做到"城市级到区县级"的精度,经纬度给的是城市中心点,不是用户的精确位置。你要是拿这个去做"必须精确定位到门牌号"的业务,趁早换思路。

但反过来,很多场景根本不需要那么精——判断用户大概在哪个省哪个市、访问来自哪个运营商,IP归属地已经是性价比最高的方案了。

搞清楚原理之后,你就知道怎么选服务了:别只看谁便宜,先问问对方数据多久更新一次、对移动网络有没有单独处理。这两点,基本决定了查询的准头。

IP9 官网:https://www.ip9.com.cn