#dns #https-server #doh #dns-client #google #public #hyper

nightly doh-dns

一个基于async/await、hyper和tokio的DNS over HTTPS (DoH)库,可以查询Google和Clouflare提供的公共DoH服务器。

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 次下载

MIT 许可证

46KB
904

doh-dns

一个用于发送DNS over HTTPS请求的库。

Crates.io 文档

概述

这是一个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