lionsoul2014/ip2region
 Watch   
 Star   
 Fork   
5 days ago
ip2region

v3.9.0

该版本的核心功能是 C# IPv6 查询支持。

What's Changed

Full Changelog: https://github.com/lionsoul2014/ip2region/compare/v3.8.1...v3.9.0

25 days ago
ip2region

v3.8.1

ip2region 3.8.1 版本主要是一些 binding 的标准或者低版本支持,具体更新如下:

  1. c binding 支持 c99 标准并且 Makefile 默认添加了 -std=c99 编译选项。
  2. lua_c binding 支持 c99 标准同时完成了 lua >= 5.1 版本的兼容,Makefile 默认也添加了 -std=c99 编译选项,例如编译 Lua 5.1 版本的扩展:
# cd lua_c binding
make LuaVersion=5.1
  1. python binding 完成了 Python >= 3.7 版本的兼容,Pypi 版本号更新为 3.0.2
28 days ago
ip2region

v3.8.0

  1. py_ip2region pypi 包支持:
pip3 install py-ip2region
  1. utilsearcher 模块:
# 工具包模块,例如:ip 解析,版本信息,vectorIndex / buffer加载等
import ip2region.util as util
# xdb 查询实现模块
import ip2region.searcher as xdb

# 使用方式参考 python binding 的 ReadMe
  1. python binding 提供了对 IPv6 的查询支持,具体使用文档请参考 Python Binding,测试方式如下:
(.venv) ➜  python git:(master) python3 search_test.py --db=../../data/ip2region_v6.xdb 
ip2region xdb searcher test program
source xdb: ../../data/ip2region_v6.xdb (IPv6, vectorIndex)
type 'quit' to exit
ip2region>> ::
{region: , ioCount: 1, took: 180 μs}
ip2region>>  240e:3b7:3272:d8d0:3b7b:3ee0:1d39:848
{region: 中国|广东省|深圳市|家庭宽带, ioCount: 8, took: 251 μs}
ip2region>> 2001:3:ffff:ffff:ffff:ffff:ffff:ffff
{region: 0|0|内网IP|内网IP, ioCount: 18, took: 474 μs}
ip2region>>
  1. 查询平均耗时:Razer 笔记本 / Ubuntu (电源均衡模式) + SATA SSD / VectorIndex 缓存,bench 结果如下:
(.venv) ➜  python git:(master) ✗ python3 bench_test.py --db=../../data/ip2region_v6.xdb --src=../../data/ipv6_source.txt --cache-policy=vectorIndex
searcher -> {"version": IPv6, "db_path": "../../data/ip2region_v6.xdb", "v_index": 524288, "c_buffer": None}
Bench finished, {cachePolicy: vectorIndex, total: 1614544, took: 65.378 s, cost: 40 μs/op}

161.45 万个 IPv6 平均查询耗时为 40 微秒/次。

2025-10-21 14:18:31
ip2region

v3.7.1

  1. 支持 xdb 3.0 的 binding 查询结果返回统一:查询出错保持原有的方式,找到了就返回字符串的 region 信息,如果找不到指定 IP 的定位信息则返回空字符串 "" ;原来的比较混乱,各种语言不统一,这对于一些自定义数据或者数据不完整的情况会出现,例如 ipv6 的原始数据就是从 1:1:: 开始的,搜索 :: 就会返回空。
  2. 支持 xdb 3.0 的 binding 中的 ReadMe 测试定位信息纠正,使用最新的 IPv6 纠正错误的定位信息。
  3. 支持 xdb 3.0 的 binding ReadMe 增加查询 API 的原型描述。
  4. binding 发行版本更新: Java:
<dependency>
    <groupId>org.lionsoul</groupId>
    <artifactId>ip2region</artifactId>
    <version>3.1.1</version>
</dependency>

npm 版本更新为 3.1.6

2025-10-20 22:30:41
ip2region

v3.7.0

  1. feat(CSharp): 增加注入服务扩展方法 by @ArgoZhang in https://github.com/lionsoul2014/ip2region/pull/390
  2. lua binding 提供了对 IPv6 的查询支持,具体请参考文档 Lua binding,测试方式如下:
➜  lua git:(master) lua ./search_test.lua --db=../../data/ip2region_v6.xdb
ip2region xdb searcher test program
source xdb: ../../data/ip2region_v6.xdb (IPv6, vectorIndex)
type 'quit' to exit
ip2region>> ::
{region: , io_count: 1, took: 0μs}
ip2region>> 240e:3b7:3272:d8d0:3b7b:3ee0:1d39:848
{region: 中国|广东省|深圳市|家庭宽带, io_count: 8, took: 0μs}
ip2region>> 2001:3:ffff:ffff:ffff:ffff:ffff:ffff
{region: 0|0|内网IP|内网IP, io_count: 18, took: 0μs}
ip2region>> 240e:3b7:3272:fab0:f703:5fef:be:37e9 
{region: 中国|广东省|深圳市|家庭宽带, io_count: 8, took: 0μs}
ip2region>>
  1. 查询平均耗时:Razer 笔记本 / Ubuntu (电源均衡模式) + SATA SSD / VectorIndex 缓存,bench 结果如下:
➜  lua git:(master) lua ./bench_test.lua --db=../../data/ip2region_v6.xdb --src=../../data/ipv6_source.txt                       
Bench finished, {cachePolicy: vectorIndex, total: 1614544, took: {total: 72.000s, search: 64.000s}, cost: 39.640 μs/op}

161.4 万个 IPv6 平均查询耗时为 39.6 微秒/次。

2025-10-17 12:47:51
ip2region

v3.6.1

一,IPv6 数据优化更新,具体变化如下:

  1. 数据错误修正:最早版本的数据存在严重的错误,例如:内网或者保留 IP 也给了定位信息,现在已经修复这些错误并且统一地域信息为:0|0|内网IP|内网IP,和 ipv4 的保留 IP 格式保持完全一致。
  2. 数据段清洗:原始数据有 1700万+ 行的 IP 数据段,IPv6 目前还没有这么分散,使用了注册局提供的信息重新定义了 v6 的数据段,经过清洗合并后只剩下 807272 行,成功的将原始数据从 1.8G 降低到了 81M。
  3. 定位信息矫正:使用注册局的一些公开信息重新校正了部分定位信息,到目前位置定位信息的准确率会有一些提升。
  4. 字段格式不变:还是和最版本的一致,统一为 国家|省份|城市|带宽类型
  5. XDB 文件瘦身:经过清洗合并后,xdb文件也从原来的 618M 瘦身到了目前的 35M。

二,javascript binding 优化: 当目标 IP 搜索不到的时候返回 null 防止程序运行异常,对于自定义数据的情景这种情况可能会出现:

  // empty match interception.
  // and this could be a case.
  if (dPtr == -1) {
      return null;
  }

npm 版本请更新为:3.1.3

 "dependencies": {
     "ip2region.js": "^3.1.3",
}
2025-10-15 13:44:15
ip2region

v3.6.0

  1. ip2region.js npm 包支持:
npm install ip2region.js --save
  1. javascript binding (nodejs / typescript) 提供了对 IPv6 的查询支持,具体使用文档请参考 javascript Binding,测试方式如下:
➜  javascript git:(master) node tests/search.app.js --db=../../data/ip2region_v6.xdb                           
ip2region xdb searcher test program
source xdb: ../../data/ip2region_v6.xdb (IPv6, vectorIndex)
type 'quit' to exit
ip2region>> ::
{region: |||, ioCount: 2, took: 158.64 μs}
ip2region>> 240e:3b7:3272:d8d0:3b7b:3ee0:1d39:848
{region: 中国|广东省|深圳市|家庭宽带, ioCount: 14, took: 256.98 μs}
ip2region>> 2001:3:ffff:ffff:ffff:ffff:ffff:ffff
{region: 美国|加利福尼亚州|洛杉矶|专线用户, ioCount: 21, took: 241.755 μs}
ip2region>>
  1. 查询平均耗时:Razer 笔记本 / Ubuntu (电源均衡模式) + SATA SSD / VectorIndex 缓存,bench 结果如下:
➜  javascript git:(master) node tests/bench.app.js --db=../../data/ip2region_v6.xdb --src=../../data/ipv6_source.txt                                    
Searcher: {"version": IPv6, "dbPath": ../../data/ip2region_v6.xdb, "handle": 21, "vectorIndex": 524288 "cBuffer": null}
Bench finished, {cachePolicy: vectorIndex, total: 34159862, took: 963.9443019528878 s, cost: 28.21862400828457 μs/op}

3415.9 万个 IPv6 平均查询耗时为 28.2 微秒/次。

2025-09-30 09:50:18
ip2region

v3.5.1-release

  1. C binding 修改通过了 msvc 的编译运行。
  2. Rust maker 提供了 IPv6 的生成支持,详细文档请参考 Rust Maker,使用方式如下:
# ipv6
./target/release/maker --src=../../../data/ipv6_source.txt --dst=./target/ipv6.xdb --ip-version v6
# ipv4
./target/release/maker --src=../../../data/ipv4_source.txt --dst=./target/ipv4.xdb --ip-version v4
  1. Golang / Java maker 优化 IP 段的合并逻辑,对于自定义字段生成 xdb 的情况能提供更好的压缩效果,以社区 v4-基础版 的 3.4G 的 商业数据不同版本的 xdb 大小对比如下:
版本 优化前 优化后 瘦身率
满载版 349M 266M 23.7%
标准版 325M 241M 25.8%
精简版 324M 69M 78.7%
2025-09-24 17:35:29
ip2region

v3.5.0-release

  1. Rust binding 增加了 NoCache / VectorIndex / FullMemory 三种缓存策略的完整实现。
  2. Rust binding 提了 IPv6 的查询支持,具体使用文档请参考 Rust Binding,测试方式如下:
$ cd binding/rust
$ ./target/release/searcher --xdb='../../data/ip2region_v6.xdb' query

ip2region xdb searcher test program, type `quit` or `Ctrl + c` to exit
ip2region>> 2001:5:4::
region: Ok("荷兰|北荷兰省|阿姆斯特丹|专线用户"), took: 284.80775ms
ip2region>> 2001::
region: Ok("美国|加利福尼亚州|洛杉矶|专线用户"), took: 12.75µs
ip2region>> 2001:5:6::
region: Ok("荷兰|北荷兰省|阿姆斯特丹|专线用户"), took: 52.958µs
ip2region>> 2001:5:5::
region: Ok("比利时|弗拉芒大区|泽勒|专线用户"), took: 123.375µs
ip2region>>
  1. Rust 增加了标准的原始数据/xdb 的 bench 测试,方便开发者测试查询性能,验证 xdb 文件的有效性,测试方式如下:
$ cd binding/rust/example
$ cargo build -r
## 通过 data/ip2region_v4.xdb 和 data/ipv4_source.txt 进行 ipv4 的 bench 测试:
$ RUST_LOG=debug ../target/release/searcher --xdb='../../../data/ip2region_v4.xdb' bench '../../../data/ipv4_source.txt'
## 通过 data/ip2region_v6.xdb 和 data/ipv6_source.txt 进行 ipv6 的 bench 测试:
$ RUST_LOG=debug ../target/release/searcher --xdb='../../../data/ip2region_v6.xdb' bench '../../../data/ipv6_source.txt'
  1. Java/Golang maker 生成过程中的允许空 region 信息方便自定义字段的的指定,有些字段的值确实为空。
2025-09-21 13:07:47
ip2region

v3.4.0-release

  1. lua_c binding 提供了对 IPv6 的查询支持,具体使用文档请参考 Lua_c Binding,测试方式如下:
➜  lua_c git:(master) lua ./search_test.lua --db=../../data/ip2region_v6.xdb
ip2region xdb searcher test program
source xdb: ../../data/ip2region_v6.xdb (IPv6, vectorIndex)
type 'quit' to exit
ip2region>> ::
{region: |||, io_count: 2, took: 63μs}
ip2region>> 240e:3b7:3272:d8d0:3b7b:3ee0:1d39:848
{region: 中国|广东省|深圳市|家庭宽带, io_count: 14, took: 55μs}
ip2region>> 2001:3:ffff:ffff:ffff:ffff:ffff:ffff
{region: 美国|加利福尼亚州|洛杉矶|专线用户, io_count: 21, took: 127μs}
ip2region>>
  1. 因为接入的最新的 c binding 并且使用的自动 region 内存管理,所以适用于任意长度的地域信息的查询。
  2. 查询平均耗时:Razer 笔记本 / Ubuntu (电源均衡模式) + SATA SSD / VectorIndex 缓存,bench 结果如下:
➜  lua_c git:(master) ✗ lua ./bench_test.lua --db=../../data/ip2region_v6.xdb --src=../../data/ipv6_source.txt                       
Bench finished, {cachePolicy: vectorIndex, total: 34159862, took: 829.008 s, cost: 23.176 μs/op}

3415.9 万个 IPv6 平均查询耗时为 23.1 微秒/次。