9个版本

新版本 0.3.9 2024年8月17日
0.3.8 2023年9月12日
0.3.7 2022年10月21日
0.3.5 2022年2月11日
0.1.0 2022年2月10日

#283 in 地理空间

MIT/Apache

35KB
618

db_ip

一个用于在安全的Rust中查询db-ip.com CSV数据库的(非官方)库。

此库与db-ip.com无关,也未得到其认可。

请注意,使用此库与轻量级数据库(例如在构建步骤中自动下载的数据库)一起使用时,您将受许可条款(要求归属)的约束。

示例

您可以使用DbIpDatabase<CountryCode>获取实际的两位字母国家代码。国家代码数据库将以压缩形式嵌入到您的Rust二进制文件中。

use db_ip::{DbIpDatabase, CountryCode, include_country_code_database};

// Embed compressed database in binary:
let db = include_country_code_database!();
// Or, load it from the filesystem:
// let db = DbIpDatabase::<CountryCode>::from_csv_file("country_or_city_data.csv").unwrap();

assert_eq!(
    db.get(&"192.99.174.0".parse().unwrap()),
    Some(CountryCode::from_str("US").unwrap())
);

您可以使用DbIpDatabase<Region>,通过启用region功能,来了解IP的位置。由于可能性较少,这会占用更小的二进制文件大小和RAM。

use db_ip::{DbIpDatabase, Region, include_region_database};

// Embed compressed database in binary:
let db = include_region_database!();
// Or, load it from the filesystem:
// let db = DbIpDatabase::<Region>::from_csv_file("country_or_city_data.csv").unwrap();

assert_eq!(
    db.get(&"192.99.174.0".parse().unwrap()),
    Some(Region::NorthAmerica)
);

最后,您可以自己实现IpData,以存储从国家或城市数据记录中派生出的任何其他类型的数据。

下载IP地理位置数据

您可以通过以下方式手动下载实际的IP地理位置数据(CSV格式)。

  • 使用默认的download-country-lite功能,它尝试下载最新的国家轻量级数据
  • 国家数据轻量级(推荐)
  • 城市数据轻量级(文件大小较大)
  • 您还可以尝试付费数据库版本,以获得更高的准确性,但它们尚未与这个crate进行测试

下载CSV文件后,使用csv功能加载它。

特性

原始CSV数据解析需要一些时间,即使在发布模式下也是如此。您可以使用 serde 功能创建和加载序列化版本。

您可以根据需要选择性地禁用 ipv4ipv6 功能,它们默认都开启。

查找相对快速,发布模式下不到100ns。

限制

如果您想更容易地访问除 CountryCodeRegion 之外的数据,请创建一个问题。

当前不支持 db-ip.com API,因此很难保持数据库更新。

许可证

代码在以下任一许可证下授权:

任您选择。

捆绑/下载的地理位置数据在 LICENSE-DBIP 许可证下授权。

贡献

除非您明确表示,否则您根据Apache-2.0许可证定义的工作中的任何贡献,都将作为上述双重许可,没有任何附加条款或条件。

依赖

~1.5–4MB
~58K SLoC