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 在 网络编程
每月下载量655次
在 2 crate 中使用
30KB
708 行
external-ip
通过联系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