Appearance
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