16 个不稳定版本 (4 个重大更改)
0.5.0 | 2023 年 10 月 21 日 |
---|---|
0.4.2 | 2023 年 4 月 27 日 |
0.3.5 | 2023 年 1 月 14 日 |
0.3.4 | 2022 年 12 月 28 日 |
0.1.1 | 2021 年 1 月 7 日 |
#255 在 数据库接口
每月 1,561 次下载
56KB
1K SLoC
IP2Location & IP2Proxy
这个库读取 IP2Location 和 IP2Proxy 的 IP2Location DB 格式,并返回给定 IP 的地理信息。
要求
Rust 1.60.0
及以上(2021 版本)
构建
- 调试
cargo b
- 发布
cargo b --release
测试
cargo t -v
用法
[dependencies]
ip2location = "0.5.0"
示例
use ip2location::{error, Record, DB};
const IPV4BIN: &str = "data/IP2LOCATION-LITE-DB1.BIN";
const IPV6BIN: &str = "data/IP2LOCATION-LITE-DB1.IPV6.BIN";
const IP2PROXYBIN: &str = "data/IP2PROXY-IP-COUNTRY.BIN";
// Lookup an IP v4 in the IP2Location V6 BIN Database
fn ip_lookup_in_ipv6bin() -> Result<(), error::Error> {
let mut db = DB::from_file(IPV6BIN)?;
let record = db.ip_lookup("43.224.159.155".parse().unwrap())?;
let record = if let Record::LocationDb(rec) = record {
Some(rec)
} else {
None
};
assert!(record.is_some());
let record = record.unwrap();
assert!(!record.country.is_none());
assert_eq!(record.country.clone().unwrap().short_name, "IN");
assert_eq!(record.country.unwrap().long_name, "India");
Ok(())
}
// Lookup an IP v4 in the IP2Location V4 BIN Database
fn ip_lookup_in_ipv4bin() -> Result<(), error::Error> {
let mut db = DB::from_file(IPV4BIN)?;
let record = db.ip_lookup("43.224.159.155".parse().unwrap())?;
let record = if let Record::LocationDb(rec) = record {
Some(rec)
} else {
None
};
assert!(record.is_some());
let record = record.unwrap();
assert!(!record.country.is_none());
assert_eq!(record.country.clone().unwrap().short_name, "IN");
assert_eq!(record.country.unwrap().long_name, "India");
Ok(())
}
// Lookup an IP in the Proxy Database
fn ip_lookup_in_proxy_bin() -> Result<(), error::Error> {
let mut db = DB::from_file(IP2PROXYBIN)?;
let record = db.ip_lookup("1.1.1.1".parse().unwrap())?;
let record = if let Record::ProxyDb(rec) = record {
Some(rec)
} else {
None
};
assert!(record.is_some());
let record = record.unwrap();
assert!(!record.country.is_none());
Ok(())
}
执行示例
cargo b --example
# IP2Lcoation Example
./target/debug/examples/lookup data/IP2LOCATION-LITE-DB1.IPV6.BIN 2a01:cb08:8d14::
Db Path: data/IP2LOCATION-LITE-DB1.IPV6.BIN
|- Db Type: 1
|- Db Column: 2
|- Db Date (YY/MM/DD): 20/12/28
Ok(
Record {
ip: "2a01:cb08:8d14::",
latitude: None,
longitude: None,
country: Some(
Country {
short_name: "FR",
long_name: "France",
},
),
region: None,
city: None,
isp: None,
domain: None,
zip_code: None,
time_zone: None,
net_speed: None,
idd_code: None,
area_code: None,
weather_station_code: None,
weather_station_name: None,
mcc: None,
mnc: None,
mobile_brand: None,
elevation: None,
usage_type: None,
address_type: None,
category: None,
district: None,
asn: None,
as_name: None,
},
)
# IP2Proxy Example
./target/debug/examples/lookup data/sample.bin.px11/IP2PROXY-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP-DOMAIN-USAGETYPE-ASN-LASTSEEN-THREAT-RESIDENTIAL-PROVIDER.BIN 194.59.249.19
Db Path: data/sample.bin.px11/IP2PROXY-IP-PROXYTYPE-COUNTRY-REGION-CITY-ISP-DOMAIN-USAGETYPE-ASN-LASTSEEN-THREAT-RESIDENTIAL-PROVIDER.BIN
|- Db Type: 11
|- Db Column: 13
|- Db Date (YY/MM/DD): 21/5/28
ProxyDb(
ProxyRecord {
ip: 1.1.1.1,
country: Some(
Country {
short_name: "US",
long_name: "United States of America",
},
),
region: Some(
"California",
),
city: Some(
"Los Angeles",
),
isp: Some(
"APNIC and CloudFlare DNS Resolver Project",
),
domain: Some(
"cloudflare.com",
),
is_proxy: Some(
IsAProxy,
),
proxy_type: Some(
"DCH",
),
asn: Some(
"13335",
),
as_: Some(
"CloudFlare Inc",
),
last_seen: Some(
"27",
),
threat: Some(
"-",
),
provider: Some(
"-",
),
usage_type: Some(
"CDN",
),
},
)
许可证
这是一个免费软件,根据 MIT 许可证授权。
Ip2Location 数据库
Sriram
依赖项
~1.3–2.4MB
~49K SLoC