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 |
|
#283 in 地理空间
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
功能创建和加载序列化版本。
您可以根据需要选择性地禁用 ipv4
和 ipv6
功能,它们默认都开启。
查找相对快速,发布模式下不到100ns。
限制
如果您想更容易地访问除 CountryCode
和 Region
之外的数据,请创建一个问题。
当前不支持 db-ip.com API,因此很难保持数据库更新。
许可证
代码在以下任一许可证下授权:
- Apache License, Version 2.0 (LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任您选择。
捆绑/下载的地理位置数据在 LICENSE-DBIP 许可证下授权。
贡献
除非您明确表示,否则您根据Apache-2.0许可证定义的工作中的任何贡献,都将作为上述双重许可,没有任何附加条款或条件。
依赖
~1.5–4MB
~58K SLoC