ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

ip2region:免费离线 IP 定位库,从 clone 到上线的完整指南

ip2region:免费离线 IP 定位库,从 clone 到上线的完整指南 ip2region免费离线 IP 定位库从 clone 到上线的完整指南【免费下载链接】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给登录接口做地域风控、给每条访问日志标上归属城市这两个需求大概是你最常在业务里碰到的。ip2region 是一款免费开源的离线 IP 定位库数据文件放在本地磁盘查询全程在进程内完成单次查询微秒级响应IPv4/IPv6 双协议都支持。查一个 IP 不用出网络也就没有外部接口限流、计费或抖动的问题。从 clone 到完成首次查询的最快路径最短路径就三步拿代码、找到现成的数据文件、跑官方测试程序。准备 xdb 数据文件data/ 目录自带源数据和生成好的查询文件。ipv4_source.txt、ipv6_source.txt是原始 IP 段文本每行形如起始IP|结束IP|地域信息而ip2region_v4.xdb约 11MB和ip2region_v6.xdb约 37MB是查询客户端直接使用的二进制库。首次体验直接用现成的 xdb 就行生成步骤可以跳过。用 Golang 客户端跑通首次查询以 Golang 绑定 为例目录里带了交互式测试程序编译后直接运行git clone https://gitcode.com/GitHub_Trending/ip/ip2region cd ip2region/binding/golang make ./xdb_searcher search --v4-db../../data/ip2region_v4.xdb输入任意 IP即可看到地域结果和单次查询耗时。返回的地域字段是统一的国家|省份|城市|运营商|ISO-alpha2码格式国内数据为中文例如中国|广东省|深圳市|电信|CN。三种缓存方案怎么选查询客户端提供三种缓存策略本质上是用多少内存换一次磁盘 IO缓存方案内存占用单次查询耗时适用条件file 纯文件几乎为零十微秒级每次有一次磁盘 IO内存非常紧张的环境vectorIndex 向量索引固定512KiB平均100 微秒内生产环境的默认选择content 整文件与 xdb 文件大小相同10 微秒级无磁盘 IO高并发且内存充足向量索引是 xdb 里的一张指针表缓存后查询不再需要回磁盘读索引。它固定只占 512KiB不随数据库变大而膨胀所以多数服务选它即可。content 方案把整个文件搬进内存、彻底消除 IO代价是占用等于文件大小的内存。而 file 方案不占额外内存时同样能跑到十微秒级磁盘 IO 是它唯一的变量。各语言集成入口在哪里查询客户端统一放在 binding/ 下常用的几个语言入口说明Golangbinding/golang/自带并发安全的 Ip2Region 查询服务Javabinding/java/提供 SearcherPool 与 ConfigBuilderPythonbinding/python/安装后即可写脚本查询C / Cbinding/c/ / binding/cpp/适合嵌入到 C 系项目与网关Rustbinding/rust/双协议查询与错误处理JavaScript / C#binding/javascript/ / binding/csharp/前后端场景均可用此外还有 PHP、Lua、Lua C 扩展、Erlang、仓颉的绑定以及一个可编译进网关的 Nginx 模块。每个语言目录都有 README 和可直接运行的测试程序照抄改造即可。多线程服务里建议用各语言自带的并发安全封装如 Golang 的 service 包、Java 的 SearcherPool不要把基于文件的 Searcher 实例在线程间裸共享。Golang 的最小用法大致如下v4Config, _ : service.NewV4Config(service.VIndexCache, data/ip2region_v4.xdb, 20) ip2region, _ : service.NewIp2Region(v4Config, nil) region, _ : ip2region.Search(113.92.157.29)最后一个参数是 Searcher 池大小按你的并发量设置即可。想换数据源时用 maker 目录自定义数据走 maker/。以 Golang 生成器为例编译后一条命令生成 xdbcd maker/golang make ./xdb_maker gen --src../../data/ipv4_source.txt --dstip2region_v4.xdb --versionipv4生成过程会自动合并相邻 IP 段、对相同地域信息去重压缩最终文件比原始文本紧凑得多内置 v4 源数据有68 万行 IP 段。地域字段完全可定制标准五段之后还能追加 GPS 坐标、邮编等自有数据等于用它管理自己的一套 IP 库。Java、Python、C#、Rust、C 也都有对应生成器。几个真实的落地场景登录与注册风控同账号请求短时间内从国内切到海外是常见盗号信号微秒级查询可以直接嵌在风控规则里不会成为链路瓶颈。运营看板的地域维度采集日志时对每个请求打上地域结果后续报表按国家、省份、城市聚合数据链路全程离线。网关层透传用 Nginx 模块在接入层查好地域写成请求头传下去业务代码不引入任何新依赖。踩坑记录现象、原因与处理现象P99 查询耗时偶发飙高。原因纯文件方案每次查询有一次磁盘 IO撞上磁盘繁忙。处理切到向量索引或整文件缓存。现象服务内存占用远超预期。原因对 v6 文件用了整文件缓存约37MB或每请求新建查询实例。处理换回 512KiB 的向量索引方案并用连接池复用 Searcher 实例。现象升级客户端后部分查询报错。原因xdb 文件与新版 Searcher 不兼容。处理服务启动时跑一次 Verify 校验锁住匹配的版本组合不要每次查询都校验。现象地域结果和实际情况对不上。原因仓库自带的原始数据不规律更新。处理用 maker 的 edit 工具手动修正或自建检测式自动更新流程。适用边界它不适合做什么ip2region 解决的是微秒级本地查询、双协议、数据自管这一件事。它不是实时地理定位服务做不到街道级精度或经纬度反算也不会自动同步运营商数据变更如果业务把数据必须最新写进了 SLA就需要引入商业数据源再走一遍 maker 生成。反过来如果你的需求只是低成本地知道 IP 在哪个省哪个城市、且查询量很大它基本是免费开源里绕不开的选项。【免费下载链接】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),仅供参考
返回列表