#dns #doh

nightly doh-dns

A DNS over HTTPS (DoH) library that queries public DoH servers provided by Google and Clouflare based on async/await, hyper, and tokio

4 releases

0.2.0 Jan 21, 2020
0.1.2 Oct 25, 2019
0.1.1 Oct 25, 2019
0.1.0 Oct 25, 2019

#9 in #doh

25 downloads per month

MIT license

904 lines


A library to make DNS over HTTPS requests.

Crates.io Documentation


This DNS over HTTPS (DoH) library queries public DoH servers provided by Google and Clouflare. It is based on async/await with the help of hyper and tokio.

The library supports timeouts and retries which can be fully customized. A utility in the dohdns directory is provided in this crate to use this library in the command line.

Quick Start

To quickly get started, a default client can be created with Dns:default() and A records can be queried using Dns::resolve_a(). The default resolvers use Google first with a timeout of 3 seconds and Clouflare second with a timeout of 10 seconds. Note: Cloudlare does not support queries for ANY records. You can use the Google resolver for that.


use doh_dns::{client::HyperDnsClient, Dns, DnsHttpsServer};
use std::time::Duration;
use tokio;

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 server is used.
    // Alternatively, the default server setup can be used with:
    // let dns = Dns::default();
    let dns: Dns<HyperDnsClient> = Dns::with_servers(&[
    match dns.resolve_a("www.cloudflare.com").await {
        Ok(responses) => {
            if responses.is_empty() {
                println!("No entries found.");
            } else {
                for res in responses {
                        "name: {}, type: {}, TTL: {}, data: {}",
        Err(err) => println!("Error: {}", err),


This library uses the log crate to log errors during retries. Please see that create on methods on display such errors. If no logger is setup, nothing will be logged.


~341K SLoC