#ip-address #source #dns #external #http #service #system

external-ip

异步库,用于获取系统外部IP

13个稳定版本 (5个主要版本)

5.2.0 2024年4月26日
4.3.0 2024年3月31日
4.2.0 2023年1月30日
4.1.0 2021年1月10日
0.1.0 2019年12月30日

#1099网络编程

Download history 246/week @ 2024-04-22 73/week @ 2024-04-29 10/week @ 2024-05-06 164/week @ 2024-05-13 275/week @ 2024-05-20 167/week @ 2024-05-27 196/week @ 2024-06-03 159/week @ 2024-06-10 115/week @ 2024-06-17 133/week @ 2024-06-24 103/week @ 2024-07-01 87/week @ 2024-07-08 222/week @ 2024-07-15 185/week @ 2024-07-22 166/week @ 2024-07-29 79/week @ 2024-08-05

每月下载量655次
2 crate 中使用

MIT 许可证

30KB
708

external-ip

Build Status

通过联系http和dns外部服务来查找当前的外部IP地址。

如果至少有一个源回复,则报告出现频率最高的回复作为IP地址。

三个函数提供了一组已知可工作的源。

  • get_http_sources 返回所有已知的http源
  • get_dns_sources 返回所有已知的dns源
  • get_sources 返回所有源的组合

此外,如果启用功能(discover_igd),可以实例化单个igd源,从家庭路由器获取IP。如果启用该功能,则get_sources也会将其作为源返回。

运行时

如果使用HTTP解析器,则需要使用Tokio运行时运行,因为依赖于hyper。DNS解析器目前可以与其他执行器一起工作。(已测试与futures一起使用)

扩展

可以通过API动态扩展源,只要实现了Source接口并将其作为boxed trait object传递即可。

示例

为了便于使用,只需要一个异步函数就可以尝试启用所有默认源以获取IP

  let result = external_ip::get_ipv4();
  let value : Option<IpAddr> = block_on(result);

  let result = external_ip::get_ipv6();
  let value : Option<IpAddr> = block_on(result);

策略

该库支持3种共识策略。默认策略是随机

  • 并行查询所有源,并返回最常见的响应
  • 按顺序逐个查询源,并返回第一个成功的响应
  • 随机按顺序逐个查询源,并返回第一个成功的响应

可以选择解析到的特定地址族,所有解析器都将尝试解析该族或失败。

  • 全部
  • IPv4
  • IPv6

变更日志

v1

  • 初始发布

v2

  • 基于trust dns而不是c-ares。现在需要的外部依赖更少(目前只有ssl)

v3

  • 默认策略现在是随机的

v4

  • 使用时不再消耗共识

v5

  • 添加了IP族选择选项
  • 支持IPv6的http源
  • 更新了http和dns源

依赖项

~7–18MB
~263K SLoC