#dns-resolver #dns-queries #dns #dns-resolution #dns-query #dns-lookup #dnssec

async-std-resolver

Hickory DNS 是一个安全可靠的 DNS 库,适用于 async-std。此解析库使用 hickory-proto 库执行所有 DNS 查询。解析器旨在成为任何 DNS 记录解析的高级别库(请参阅 Resolver 和 AsyncResolver 以了解支持的解析类型)。客户端可用于其他查询。

33 个版本

0.25.0-alpha.22024 年 8 月 6 日
0.25.0-alpha.12024 年 6 月 16 日
0.24.1 2024 年 4 月 18 日
0.24.0 2023 年 10 月 14 日
0.19.5 2020 年 4 月 28 日

#537 in 网络编程

Download history 6787/week @ 2024-04-28 7488/week @ 2024-05-05 7712/week @ 2024-05-12 8317/week @ 2024-05-19 8275/week @ 2024-05-26 8000/week @ 2024-06-02 10359/week @ 2024-06-09 7926/week @ 2024-06-16 6393/week @ 2024-06-23 4720/week @ 2024-06-30 5202/week @ 2024-07-07 7191/week @ 2024-07-14 6717/week @ 2024-07-21 6596/week @ 2024-07-28 6414/week @ 2024-08-04 10147/week @ 2024-08-11

每月 30,521 次下载
用于 55 个 Crates (11 直接)

MIT/Apache

390KB
7.5K SLoC

概述

Hickory DNS Async-Std Resolver 是一个库,它使用 Hickory DNS 解析库实现 DNS 解析器。

此库包含 IPv4(A)和 IPv6(AAAA)解析的实现,更多功能正在开发中。它基于 async-std 异步 IO 项目构建,这允许它集成到使用 async-std 和 futures 库的其他系统中。Hickory DNS 项目 包含其他 DNS 库:用于原始协议使用的 客户端库、用于托管区域的 服务器库,以及基于 rustlsnative-tls 的 TLS 实现的变体。

注意 此项目已从 Trust-DNS 重命名为 Hickory DNS,并已移动到 https://github.com/hickory-dns/hickory-dns 组织和仓库,从 0.24 开始。

功能

  • 各种 IPv4 和 IPv6 查找策略
  • /etc/resolv.conf 基于 Unix/Posix 系统的配置
  • 基于性能的优先级使用的名称服务器池
  • 查询结果的缓存
  • NxDomain/NoData 缓存(负缓存)
  • TBD(在 tokio 实现):DNSSEC 验证
  • 通用记录类型查找
  • CNAME 链解析
  • 实验性 mDNS 支持(使用 mdns 功能启用)
  • 待定(在tokio实现中):DNS over TLS(使用native-tlsrustlsopenssl;推荐使用native-tlsrustls
  • 待定(在tokio实现中):DNS over HTTPS(目前仅支持rustls

示例

use std::net::*;
use async_std::prelude::*;
use async_std_resolver::{resolver, config};

#[async_std::main]
async fn main() {
  // Construct a new Resolver with default configuration options
  let resolver = resolver(
    config::ResolverConfig::default(),
    config::ResolverOpts::default(),
  ).await;

  // Lookup the IP addresses associated with a name.
  // This returns a future that will lookup the IP addresses, it must be run in the Core to
  //  to get the actual result.
  let mut response = resolver.lookup_ip("www.example.com.").await.unwrap();

  // There can be many addresses associated with the name,
  //  this can return IPv4 and/or IPv6 addresses
  let address = response.iter().next().expect("no addresses returned!");
  if address.is_ipv4() {
    assert_eq!(address, IpAddr::V4(Ipv4Addr::new(93, 184, 215, 14)));
  } else {
    assert_eq!(address, IpAddr::V6(Ipv6Addr::new(0x2606, 0x2800, 0x21f, 0xcb07, 0x6820, 0x80da, 0xaf6b, 0x8b2c)));
  }
}

最低Rust版本

本项目的当前最低rustc版本为1.70

版本管理

Hickory DNS会尽力遵循semver。Hickory DNS将在公开API稳定后将升级到1.0版本。这并不意味着Hickory DNS在0.x更新之间的升级必然会出现破坏。尽可能的情况下,旧的API将被弃用,并注明被弃用的替代方案。Hickory DNS会尽最大努力不因API更改而破坏依赖于它的软件,尽管这不能保证。弃用的接口将在它们被弃用后的至少一个主要版本中维护(如果可能),但升级到1.0的情况除外,届时所有弃用的接口都将计划移除。

依赖关系

~10–21MB
~317K SLoC