4个版本
0.2.0 | 2020年1月21日 |
---|---|
0.1.2 | 2019年10月25日 |
0.1.1 | 2019年10月25日 |
0.1.0 | 2019年10月25日 |
#9 in #doh
每月 21 次下载
46KB
904 行
doh-dns
一个用于发送DNS over HTTPS请求的库。
概述
这是一个DNS over HTTPS (DoH)库,可以查询由Google和Clouflare提供的公共DoH服务器。它基于async/await,并利用hyper和tokio。
该库支持超时和重试,可以完全自定义。该crate中的dohdns目录提供了一个实用工具,用于在命令行中使用此库。
快速入门
要快速开始,可以使用Dns:default()
创建默认客户端,并使用Dns::resolve_a()
查询A记录。默认解析器首先使用Google,超时为3秒,其次使用Clouflare,超时为10秒。注意:Cloudflare不支持查询ANY记录。您可以为此使用Google解析器。
示例
use doh_dns::{client::HyperDnsClient, Dns, DnsHttpsServer};
use std::time::Duration;
use tokio;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// The following sets up the main DoH server to be Google with a default timeout
// of 2 seconds. If a retry is needed, the Cloudflare's 1.1.1.1 server is used.
// Alternatively, the default server setup can be used with:
// let dns = Dns::default();
let dns: Dns<HyperDnsClient> = Dns::with_servers(&[
DnsHttpsServer::Google(Duration::from_secs(2)),
DnsHttpsServer::Cloudflare1_1_1_1(Duration::from_secs(10)),
])
.unwrap();
match dns.resolve_a("www.cloudflare.com").await {
Ok(responses) => {
if responses.is_empty() {
println!("No entries found.");
} else {
for res in responses {
println!(
"name: {}, type: {}, TTL: {}, data: {}",
res.name,
dns.rtype_to_name(res.r#type),
res.TTL,
res.data
);
}
}
}
Err(err) => println!("Error: {}", err),
}
Ok(())
}
日志记录
该库使用log crate在重试期间记录错误。请参阅创建方法以显示这些错误。如果没有设置日志记录器,则不会记录任何内容。
依赖项
~10–21MB
~320K SLoC