13个版本 (5个稳定版)

3.0.0 2023年11月27日
2.2.0 2023年9月20日
2.1.0 2023年4月13日
2.0.0 2023年3月29日
0.1.2 2019年10月31日

#690网络编程 中排名

Download history 145/week @ 2024-04-15 109/week @ 2024-04-22 14/week @ 2024-04-29 2/week @ 2024-05-06 59/week @ 2024-05-13 38/week @ 2024-05-20 11/week @ 2024-05-27 30/week @ 2024-06-03 16/week @ 2024-06-10 8/week @ 2024-06-17 3/week @ 2024-06-24 25/week @ 2024-07-01 31/week @ 2024-07-22 65/week @ 2024-07-29

每月下载量96次

Apache-2.0

97KB
2K SLoC

IPinfo IPinfo Rust客户端库

这是IPinfo.io IP地址API的Rust客户端库。它允许您查找自己的IP地址,或获取以下任何IP地址的详细信息

  • IP地理位置(城市、地区、国家、邮政编码、纬度和经度)
  • ASN(ISP或网络运营商、关联的域名和类型,如商业、托管或公司)
  • 公司数据(使用IP地址的商业名称和域名)
  • 运营商详情(移动运营商的名称以及该运营商的MNC和MCC,如果IP仅用于移动流量)

在此 检查我们为您IP地址拥有的所有数据。

用法

要使用IPinfo,请将以下内容添加到您的 Cargo.toml 文件中。

[dependencies]
ipinfo = "3.0.0"

入门

需要一个访问令牌,可以在 https://ipinfo.io/signup 上注册免费账户获得。

免费计划每月限制50,000次请求,并且不包含一些数据字段,如IP类型和公司信息。要获取IP地址上的完整信息列表并每天进行更多请求,请参阅 https://ipinfo.io/pricing

示例

/examples 目录中有几个可以直接运行的示例。这些示例可以直接运行,只需将 <token> 替换为您的访问令牌即可。

cargo run --example lookup -- <token>
cargo run --example lookup_batch -- <token>
cargo run --example get_map

上面的 lookup 示例看起来大致如下:

use ipinfo::{IpInfo, IpInfoConfig};
#[tokio::main]
async fn main() {
    let config = IpInfoConfig {
        token: Some("<token>".to_string()),
        ..Default::default()
    };

    let mut ipinfo = IpInfo::new(config)
        .expect("should construct");

    let res = ipinfo.lookup("8.8.8.8").await;
    match res {
        Ok(r) => {
            println!("{} lookup result: {:?}", "8.8.8.8", r);
        },
        Err(e) => println!("error occurred: {}", &e.to_string()),
    }
}

功能

  • 智能LRU缓存,以节省成本和配额。
  • 结构化和类型检查的查询结果。
  • 使用IPinfo的批量API进行批量IP地址查询。
  • 在世界地图上定位IP地址。

国际化

当查询IP地址时,response 包括 country_name,这是基于美式英语的国家名称,is_eu 如果国家是欧盟(EU)成员国则返回 truecountry_flag 包含国家标志的emoji和Unicode,country_currency 包含国家货币的代码和符号,country_flag_url 返回一个公链到国家标志图像的SVG,可以在任何地方使用,以及 continent 包含大陆的代码和名称。

let r = ipinfo.lookup("8.8.8.8");
println!("{}: {}", "8.8.8.8", r.country_name) // United States
println!("{}: {:?}", "8.8.8.8", r.is_eu) // Some(false)
println!("{}: {:?}", "8.8.8.8", r.country_flag) // Some(CountryFlag { emoji: "🇺🇸", unicode: "U+1F1FA U+1F1F8" })
println!("{}: {:?}", "8.8.8.8", r.country_flag_url) // Some(https://cdn.ipinfo.io/static/images/countries-flags/US.svg)
println!("{}: {:?}", "8.8.8.8", r.country_currency) // Some(CountryCurrency { code: "USD", symbol: "$" })
println!("{}: {:?}", "8.8.8.8", r.continent) // Some(Continent { code: "NA", name: "North America" })

可以在创建 IPinfo 客户端时设置 default_countriesdefault_eudefault_country_flagsdefault_currenciesdefault_continents 来返回其他语言的国家名称,更改欧盟国家以及更改标志emoji或unicode。

let countries = {
    let json_data = r#"
        {
            "US": "United States"
        }
    "#;
    serde_json::from_str(json_data).expect("error parsing user-defined JSON!")
};

let config = IpInfoConfig {
    default_countries: countries,
    ..Default::default()
};

其他库

有许多官方的IPinfo客户端库可供多种语言使用,包括PHP、Go、Java、Ruby,以及Django、Rails和Laravel等许多流行框架。还有许多第三方库和API集成可用。

贡献

想到你想看到的某些内容?您可以访问问题跟踪器以查看它是否已被报告或提出,如果没有,请随时创建问题或功能请求。准备好开始贡献了吗?贡献指南 是一个不错的起点。如果您有任何问题,请随时提问。

关于IPinfo

成立于2013年,IPinfo以提供最可靠、最准确和最深入的IP地址数据来源而自豪。我们处理数以兆字节的数据来产生我们定制的IP地理定位、公司、运营商、VPN检测、反向IP、托管域和IP类型数据集。我们的API每月处理超过400亿次请求,为10万家企业和开发者提供服务。

image

依赖项

~7-19MB
~282K SLoC