7个版本
0.2.6 | 2024年3月24日 |
---|---|
0.2.5 |
|
0.2.2 | 2022年1月10日 |
0.1.1 | 2021年11月7日 |
#6 in #resolver
82 每月下载量
在 ipfw-rs 中使用
350KB
8K SLoC
CDns-rs
v 0.2不稳定版
一个客户端DNS查询库的实现,同时能够查找/etc/hosts
中的主机名。
它还能够解析/etc/resolv.conf
并使用该文件中的选项来自配置自己。因此,它类似于libc的gethostbyname(3)
或gethostbyaddr(3)
。配置可以被覆盖。
此库支持异步和同步代码。目前异步部分不可用,因为
- 它基于同步实现,因为异步代码基于同步代码,而同步代码目前不稳定
- 它需要适当的从同步迁移,因为同步使用
poll(2)
来并行进行名称解析
支持
- 通过TCP/UDP发送和接收响应
- 通过尝试TCP响应消息截断事件
- 解析
/etc/hosts(所有选项)
- 部分解析
/etc/resolve.conf(所有选项)
- 异步和同步代码(分别实现)目前异步不可用!
- 并行和非并行nameserver查询
待办事项
- 解析
/etc/nsswitch.conf
- DNSSEC
- DNS-over-TLS
- OPT_NO_CHECK_NAMES
- resolv.conf(search、domain、sortlist)
使用方法
- 见./examples/
- 见shortcuts.rs
简单示例
use cdns_rs::sync::{QDns, QuerySetup, QType, request, caches::CACHE};
fn main()
{
// a, aaaa
let res_a = request::resolve_fqdn("protonmail.com", None).unwrap();
println!("A/AAAA:");
for a in res_a
{
println!("\t{}", a);
}
}
自定义查询
use cdns_rs::sync::{QDns, QuerySetup, QType, request, caches::CACHE};
fn main()
{
// soa
let mut dns_req =
QDns::make_empty(resolvers, 1, QuerySetup::default());
dns_req.add_request(QType::SOA, "protonmail.com");
// sending request and receiving results
let res = dns_req.query();
println!("SOA:");
if res.is_results() == true
{
let inner = res.into_inner().unwrap();
for i in inner
{
for r in i.get_responses()
{
println!("\t{}", r);
}
}
}
else
{
println!("\tNo SOA found!")
}
}
依赖项
~5–13MB
~152K SLoC