#ip-geolocation #ip #geolocation #geo-ip #proxy

ip2location

使用 IP2Location BIN 数据库根据给定的 IP 找到地理信息和代理信息

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数据库接口

Download history 282/week @ 2024-04-10 242/week @ 2024-04-17 302/week @ 2024-04-24 189/week @ 2024-05-01 114/week @ 2024-05-08 103/week @ 2024-05-15 90/week @ 2024-05-22 272/week @ 2024-05-29 207/week @ 2024-06-05 452/week @ 2024-06-12 433/week @ 2024-06-19 310/week @ 2024-06-26 485/week @ 2024-07-03 378/week @ 2024-07-10 358/week @ 2024-07-17 269/week @ 2024-07-24

每月 1,561 次下载

MIT 许可证

56KB
1K SLoC

IP2Location & IP2Proxy

Crates.io Documentation

Linux Arm7 Linux x86_64 macOS x86_64 Windows x86_64

这个库读取 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