IP 归属地查询是怎么实现的?聊聊 GeoIP 数据库
为什么查一个 IP 能定位到城市?讲清楚 GeoIP 数据库的三种数据来源、城市级精度的边界、每日更新机制,以及为什么你的定位有时会差一个省。
在 IPchase 查询一个 IP,几毫秒就返回"中国 福建 宁德 联通"。很多朋友好奇:这数据哪来的?准不准?为什么有时会偏到隔壁省?
核心逻辑:一张"IP 段地图"
IP 地址不是一台台设备登记的,而是按段分配的。IANA(互联网号码分配机构)把地址块分给各大区域注册机构(APNIC 负责亚太),注册机构再分给运营商和企业。
每次分配记录都包含:"这段 IP 分给了谁、登记在哪个城市"。把这些分配数据 + 路由广播数据 + 实测数据汇总起来,就形成了 GeoIP 数据库。
数据库的本质是一个前缀树:查询 1.2.4.8 时沿着二进制前缀往下走,命中某个节点,节点上写着"这个段属于福建宁德"。
主流数据源
- MaxMind GeoLite2:事实标准,社区版免费,城市级精度,每周更新。IPchase 用的就是它,服务器本地部署
- IP2Location / DB-IP:商业数据库,各家有自家的数据修正
- 纯真 IP 库:国内老牌库,对中国大陆数据补充较好
精度:城市级是上限,不是保证
要建立一个预期:GeoIP 的城市级精度大约 70%–90%,再往上没有了。
原因是 IP 归属登记的是运营商注册地址,不是用户物理位置:
- 运营商给一个县城分配的 IP 段,可能登记在地级市分公司
- 手机流量走省级网关,全省用户查出来都是省会
- CDN 的 anycast IP(如
8.8.8.8)全球几十个节点共用,只能说"任播"
所以"查出来是宁德,实际我在福州"这类偏差属于数据机制的天然误差,任何 GeoIP 服务都存在,不存在"绝对准"的库。
更新机制:为什么每周都要更新
运营商不断调整地址段。MaxMind 每周二发布新版 GeoLite2,内容会包含:
- 新分配的地址段
- 归属信息修正
- ASN(自治系统)变更
数据库不更新的后果:新 IP 段查出来一片空白,或者归属还是上家。
IPchase 的做法是服务器本地部署 + 每天自动检查更新——查询时不依赖任何外部 API,响应快、无次数限制,数据库有新版本就自动拉取。
除了归属地,还能查到什么
一次 IP 查询能附带的信息比想象中多:
| 字段 | 来源 | 用途 |
|---|---|---|
| 国家/省/市 | GeoIP City 库 | 展示归属 |
| 经纬度 | City 库(城市中心点) | 地图标注 |
| 时区 | City 库 | 显示当地时钟 |
| ASN / 运营商 | GeoIP ASN 库 | 判断是机房还是家宽 |
| IP 类型 | 数据中心/家宽标记 | 代理识别的关键 |
其中 ASN 特别值得说:AS4134 是电信骨干、AS15169 是 Google——看到 ASN 就知道这个 IP 属于谁的网络。它是代理识别的核心依据之一。
"定位差一个省"的典型场景
知道机制之后,常见的偏差都能对上号:
- 手机流量:流量出口统一收拢到省级核心网关,全省用户对外呈现同一个城市,这是最大宗的"查出来是省会"来源
- 新开的宽带:运营商新放号的地址段登记还没跟上,GeoIP 库里可能显示为上一家使用者的归属
- 企业专线:公司总部在上海,分支机构用的 IP 段登记在总部,人查出来就在上海
- VPN / 代理:查的是出口服务器的位置,和你本人无关——这本来就是代理的工作原理
- 卫星网络:Starlink 这类服务的关口站位置和用户位置可能相隔上千公里
判断自己遇到的是哪种情况,可以看 ASN:如果 ASN 属于移动运营商(中国移动、Vodafone 之类),大概率是网关收拢;如果属于云厂商或 VPS 商(阿里云、DigitalOcean),那查的是机房位置。
经纬度是城市中心点,不是你家
GeoIP City 库返回的经纬度是登记城市的中心坐标,精度就是这个城市本身。看到地图上的点离你家差两公里很正常,差两个省也正常(登记偏差)。
有些商业数据库会给出街区级定位,那是把 WiFi 定位库、用户上报等信号叠加进去的结果,已经不属于"纯 IP 定位"的范畴。纯 IP 定位的天花板就是城市,记住这一点可以避免对任何查询服务抱有过高预期。
交叉验证的方法
想提高归属判断的可信度,可以把三类信号放在一起看:
- GeoIP 归属地——登记数据怎么说
- 时区与语言——浏览器的时区、系统语言是否与归属地一致(伪装度检测做的就是这件事)
- 延迟佐证——用 Ping 工具测到目标城市的 RTT,对照物理距离是否合理:新加坡到洛杉矶物理下限约 160ms,如果测出来 40ms,说明"洛杉矶"这个归属十有八九有问题
三者互相印证,比单看任何一个库都可靠。
小结
- IP 归属地 = 分配登记数据 + 路由数据的汇总,城市级精度 70–90%
- 查询实现是本地数据库的前缀匹配,毫秒级
- 数据每周都在变,选服务时要看更新机制
- ASN 是 IP 背后的"门派",比城市归属更有信息量
试试:IP 查询工具,输入任意 IP 看看它的完整档案。
检测你的网络环境:回到首页做一次完整检测,或试试 指纹检测。