news 2026/9/8 20:57:02

Ip2region|离线IP地址定位,10微秒出结果

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Ip2region|离线IP地址定位,10微秒出结果

Ip2region|离线IP地址定位,10微秒出结果

【免费下载链接】ip2regionIp2region is an offline IP-to-Region localization library and IP data management framework with both IPv4 and IPv6 supports, 10-microsecond level query efficiency, xdb search client for many programming languages项目地址: https://gitcode.com/GitHub_Trending/ip/ip2region

很多做风控、广告投放和 CDN 的同学都绕不开一个需求:IP地址定位。ip2region 是一个完全离线的 IP 定位库加 IP 数据管理框架,IPv4 和 IPv6 都支持,单次查询能做到 10 微秒级别。它不需要联网调第三方接口,把 xdb 数据文件放进项目里就能查,适合想省掉在线查询成本、又要扛住高并发的后端和开发者。

它到底能干什么:离线IP查询快到什么程度

微秒级完成一次IP定位查询

纯基于 xdb 文件的查询,单次响应也在 10 微秒级别。开启 vIndex 索引缓存会占用固定 512KiB 内存缓存向量索引,省掉一次磁盘 IO,平均查询效率保持在 100 微秒以内;把整个 xdb 文件读进内存后,内存占用就等于文件大小,查询稳定在 10 微秒级别,这个真香。

亿级IP段自动合并与压缩

xdb 数据格式能承载亿级别的 IP 数据段行数。生成程序会自动检查并完成相连 IP 段的合并,同时对相同地域信息做去重和压缩,最终数据文件比原始数据小得多,库大小始终可控。

自定义region存储业务数据

内置数据的 region 格式是国家|省份|城市|ISP|iso-alpha2-Code,但字段完全允许自定义,你可以往 region 后面追加 GPS 信息、国际统一地域编码、邮编等。换句话说,ip2region 不只是查询库,还能当自己的 IP 定位数据管理框架用。

统一接口同时查IPv4和IPv6

xdb 提供版本兼容的查询实现,一套统一 API 同时支持 IPv4 和 IPv6 数据,返回统一格式。双栈服务不用维护两套查询逻辑,代码里也不用自己判断协议版本。

多语言客户端一览

语言查询数据生成备注
Golang提供双协议并发安全查询服务
Java提供并发安全查询服务
Python生成器仅支持 IPv4
Rust
CC99/POSIX 实现
C++
C#生成器仅支持 IPv4
PHP仅查询客户端
JavaScriptNode.js / TypeScript
Lua / Lua C纯 Lua 与 C 扩展两种实现
Erlang
Nginx以扩展模块形式集成
Cangjie仓颉语言

如果你的技术栈不在上表,可以翻一下 binding/ 目录,里面还有社区贡献的绑定,以及 Ruby、Node.js 等第三方实现。

三个真实业务场景

风控反爬

网关在入口处对每个请求 IP 做一次本地查询,拿到国家和 ISP 信息,同一地区同一运营商的异常流量直接本地标记拦截。整条判断路径不产生一次外网调用,扛住爬虫洪峰的同时几乎不增加服务延迟。

广告地域定向

广告投放链路对延迟极其敏感,地域判断必须走在毫秒级的热路径里。离线查询加整库内存缓存让单次定位只需 10 微秒,"用户在哪个城市"这一步基本不会出现在性能分析结果里。

CDN 就近调度

调度层需要频繁查询各节点 IP 所在城市,来计算最近的边缘节点。本地文件查询不受外部查询服务的配额和带宽限制,调度决策可以随业务规模放心放大。

拿到数据后怎么维护

数据有两条更新路径。手动编辑:各 maker 工具自带编辑能力,Golang 版 maker/golang/ 和 C++ 版 maker/cpp/ 都提供 IP 原始数据编辑器,配合官方数据源或项目 Issue 里的更新条目,修正 data/ipv4_source.txt、data/ipv6_source.txt 后重新生成 xdb 即可。检测自动更新:如果你有自己的 API 或数据源,可以参照项目方分享的"检测算法"思路写更新程序,自动对比新旧数据并增量修正。

踩坑提醒(并发与内存)

  • ⚠️ 注意:基于文件和 vIndex 缓存两种模式的查询对象不是并发安全的,每个线程/协程要单独创建 searcher 使用,共享的是只读的 vIndex 缓存。
  • ⚠️ 注意:用整个 xdb 文件缓存创建的查询对象才天生并发安全,可以直接做成全局对象跨线程共享,高并发场景建议这么用。
  • ⚠️ 注意:内存账要提前算清——vIndex 固定 512KiB,全量缓存的占用就是 xdb 文件大小,上内存前先看看文件有多大。

需要说明一下边界:ip2region 内置的原始数据更新不固定,对数据新鲜度要求极高的场景建议向官方社区获取更新的离线数据;项目本身专注的是 IP 数据的存储设计与极速查询,这块它做得很扎实。想动手试试的话,直接克隆仓库:

git clone https://gitcode.com/GitHub_Trending/ip/ip2region

【免费下载链接】ip2regionIp2region is an offline IP-to-Region localization library and IP data management framework with both IPv4 and IPv6 supports, 10-microsecond level query efficiency, xdb search client for many programming languages项目地址: https://gitcode.com/GitHub_Trending/ip/ip2region

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 20:54:03

深入理解magnitude:从向量范数到机器学习与信号处理

1. magnitude 是什么:从物理量级到算法世界的核心尺度第一次接触 magnitude 这个词,是在大学物理课上。老师讲地震震级、星等亮度、声音分贝,所有这些看似无关的概念,底层都用同一个数学骨架——对数尺度下的量级比较。后来做了几…

作者头像 李华
网站建设 2026/9/8 20:53:54

电力红外过热检测数据集:VOC+YOLO双格式实战指南

简介:本资源是面向电力行业智能巡检与红外图像识别研究者的专用数据集,聚焦输电线路设备过热异常检测任务,适用于目标检测算法(如YOLO系列、Faster R-CNN等)的训练与验证。数据集共2253张红外图像,全部标注…

作者头像 李华
网站建设 2026/9/8 20:53:20

STM32实现Modbus RTU通信实战指南

简介:本资源是一套基于STM32F103C8T6单片机实现Modbus RTU通信协议的完整嵌入式开发工程,面向嵌入式初学者与工业通信入门开发者,解决串口协议栈移植、功能码解析与RS485硬件适配等典型实践难点。压缩包共581个文件,涵盖102个头文…

作者头像 李华
网站建设 2026/9/8 20:52:10

RPCS3汉化教程:5步搞定菜单到游戏对话的中文设置

RPCS3汉化教程:5步搞定菜单到游戏对话的中文设置 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 如果你刚上手RPCS3,被满屏英文菜单和英文剧情卡住,这篇RPCS3中…

作者头像 李华
网站建设 2026/9/8 20:52:06

AI开源榜风向变了:从模型参数转向应用落地与工程化

先给结论:今天这份榜单没有那种“一夜涨星两万”的怪兽级项目。恰恰相反,Top 20里能明显看到一批应用层、课程层、工程化工具的仓库正在稳步往上爬。这个变化比单日爆款更值得琢磨,说明AI开源生态的热度风向已经从“看模型参数论文”转向“拿…

作者头像 李华