
ip2region 离线IP定位库快速上手指南IPv4/IPv6 微秒级查询完整教程【免费下载链接】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你正在做用户归属地识别但不想依赖第三方 API 的网络开销和隐私风险ip2region 是一个离线 IP 地址定位库同时支持 IPv4 和 IPv6单次查询达到 10 微秒级别覆盖 C、Java、Python、Go 等 13 种语言的 xdb 查询客户端。 它解决什么问题离线IP定位库适用场景ip2region 的定位是本地跑、毫秒级内出结果的 IP 到区域国家|省份|城市|ISP定位库。它适合两类场景一是高 QPS 的服务端要在每个请求里实时打标签不能容忍几十毫秒的远程 API 调用二是数据敏感、必须离线出结果的合规场景。它不靠网络只靠一个本地 xdb 文件。⏱️ 3 分钟跑通第一个功能离线安装IP定位库并完成首次查询这一节的目标只有一个让你 3 分钟内拿到一个真实的定位结果。以 Python 客户端为例兼容 Python 3.7最短路径如下。第 1 步拿到源码和自带数据。仓库自带 IPv4/IPv6 的原始数据和 xdb 文件无需额外下载git clone https://gitcode.com/GitHub_Trending/ip/ip2region cd ip2region/binding/python第 2 步初始化 Searcher 并执行一次查询。用向量索引模式内存只多占固定 512KiBimport ip2region.util as util import ip2region.searcher as xdb db_path ../../data/ip2region_v4.xdb v_index util.load_vector_index_from_file(db_path) searcher xdb.new_with_vector_index(util.IPv4, db_path, v_index) print(searcher.search(116.163.128.5)) # 输出示例中国|北京市|北京市|电信|CN searcher.close()看到中国|北京市|北京市|电信|CN这样的输出就跑通了。不想写代码的话也可以直接跑仓库自带的交互测试脚本python3 search_test.py --db../../data/ip2region_v4.xdb⚙️ 决定使用效果的两个关键机制这一节帮你避免最常见的两类坑查询慢和查询结果不符合预期。缓存策略在磁盘IO和内存占用之间选平衡点是什么Python 客户端提供三种构造方式——new_with_file_only纯文件、new_with_vector_index缓存向量索引、new_with_buffer整文件入内存。其他语言客户端如 binding/csharp/IP2Region.Net/XDB/Searcher.cs同样是这三档。为什么影响结果纯文件模式每次查询都要做磁盘 IO向量索引模式固定占 512KiB 内存省掉一次 IO把平均查询压到 100 微秒以内整文件入内存模式则做到 10 微秒级代价是内存占用等于 xdb 文件大小IPv4 约 11MBIPv6 约 37MB见 data/。怎么选择低频、低频脚本用文件模式常驻服务默认向量索引内存充足且追求极致延迟比如网关层每请求必查用整文件模式且该模式创建的 Searcher 可以跨线程共享。xdb 数据文件格式region 字段可以自定义是什么xdb 是一个二进制文件region 字段格式默认为国家|省份|城市|ISP|iso-alpha2-code中文地区信息为中文海外为英文。为什么影响结果它决定了你search()返回值能解析出什么。生成 xdb 的程序会自动做相邻 IP 段合并和重复地域去重压缩支持亿级数据段。怎么选择如果你的业务需要 GPS、邮编等附加字段直接用 maker/ 目录下的生成程序Go、Java、Python、Rust 等 6 种实现把自己的原始数据打包成 xdb而不必换库。 真实场景示例批量IP查询与高并发服务批量处理一份IP清单场景你拿到一份几十万条 IP 的日志导出文件要逐条打上归属地标签。Searcher 对象可复用于循环查询无需每条都重建searcher xdb.new_with_vector_index(util.IPv4, db_path, v_index) for line in open(ips.txt): ip line.strip() if ip: print(ip, searcher.search(ip)) searcher.close()高并发每线程一个 Searcher或全局共享内存版场景Java 微服务要支撑上万 QPS 的实时定位。文件模式的 Searcher 不是线程安全的每线程都要独立一个实例——此时用项目内置的 binding/java/src/main/java/org/lionsoul/ip2region/service/SearcherPool.java 对象池来借还实例避免频繁创建。而如果走 content整文件入内存模式Searcher 本身可并发安全地被全局共享池子都不需要。Go 语言同样提供了 binding/golang/service/searcher_pool.go 的等价实现。 跑不通时检查这几点按顺序排查90% 的报错都出在这里xdb 与 IP 版本不匹配db_path指向 v4 文件就必须传util.IPv4查 IPv6 要换ip2region_v6.xdbutil.IPv6混用会抛异常。xdb 文件与客户端版本不适配在服务启动时调一次util.verify_from_file(db_path)做兼容性校验校验失败说明该 xdb 需要升级客户端或换数据文件。注意不要放进每次查询的热路径里。查询返回空字符串这不是报错是该 IP 在数据中确实没有记录数据段缺失直接跳过即可。IP 格式非法search()对无法解析的入参会抛ValueError批量场景下先过滤再查。Python 版本过低Python 客户端要求 3.7 及以上其他语言客户端的依赖版本见各自目录的 README如 binding/python/README_zh.md。忘了 close()文件模式和向量索引模式持有文件句柄服务退出前记得searcher.close()否则文件句柄泄漏。 延伸资料定位你需要的模块官方文档README_zh.md / README.md数据与原始 IP 数据文件data/含ip2region_v4.xdb、ipv4_source.txt等Python 查询客户端binding/python/Go 查询客户端含 SearcherPoolbinding/golang/Java 查询客户端含服务封装binding/java/xdb 生成/数据管理工具自制数据用maker/各语言客户端总览binding/13 种实现含 Nginx 扩展跑通第一个查询后下一步建议用bench_test.py在你的目标缓存策略下压一次性能把 QPS 和延迟数字记下来作为接入服务的基线。【免费下载链接】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),仅供参考