Crates.io | rat_quickdns |
lib.rs | rat_quickdns |
version | 0.1.9 |
created_at | 2025-09-26 01:32:32.077837+00 |
updated_at | 2025-09-26 01:38:27.456887+00 |
description | A high-performance, feature-rich DNS client library with support for multiple transport protocols, load balancing, caching, and filtering |
homepage | https://github.com/0ldm0s/rat_quickdns |
repository | https://github.com/0ldm0s/rat_quickdns |
max_upload_size | |
id | 1855285 |
size | 737,694 |
高性能DNS查询库,基于Rust开发,支持多种协议和智能决策。
本库使用调用者初始化模式,用户必须先初始化日志系统,然后才能使用DNS查询功能。
use rat_quickdns::{DnsResolverBuilder, QueryStrategy};
use rat_quickdns::builder::types::{DnsQueryRequest, DnsRecordType};
use rat_logger::{LoggerBuilder, LevelFilter, handler::term::TermConfig};
use std::time::Duration;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 1. 调用者初始化日志系统
LoggerBuilder::new()
.with_level(LevelFilter::Info)
.add_terminal_with_config(TermConfig::default())
.init_global_logger()?;
// 2. 创建并配置DNS解析器
let resolver = DnsResolverBuilder::new(
QueryStrategy::Smart,
true, // 启用 EDNS
"global".to_string(),
)
.add_udp_upstream("阿里DNS", "223.5.5.5")
.add_udp_upstream("腾讯DNS", "119.29.29.29")
.with_timeout(Duration::from_secs(5))
.with_verbose_logging() // 启用详细日志
.build()
.await?;
// 3. 执行DNS查询
let request = DnsQueryRequest {
domain: "example.com".to_string(),
record_type: DnsRecordType::A,
query_id: Some("test-query".to_string()),
enable_edns: true,
client_address: None,
timeout_ms: None,
disable_cache: false,
enable_dnssec: false,
};
let response = resolver.query(request).await?;
println!("DNS查询结果: {:?}", response.records);
Ok(())
}
use rat_quickdns::{StrictDnsConfig, QueryStrategy, UpstreamSpec};
use std::time::Duration;
let config = StrictDnsConfig::builder()
.strategy(QueryStrategy::Smart)
.timeout(Duration::from_secs(5))
.retry_count(3)
.enable_cache(true)
.cache_ttl(Duration::from_secs(3600))
.enable_upstream_monitoring(true)
.upstream_monitoring_interval(Duration::from_secs(30))
.port(53)
.concurrent_queries(10)
.buffer_size(4096)
.enable_stats(true)
.emergency_threshold(0.3)
.add_upstream(UpstreamSpec::new("8.8.8.8:53".to_string(), "udp".to_string(), 1))
.build()?;
let resolver = SmartDnsResolver::from_config(config)?;
本库使用rat_logger高性能日志库,支持调用者初始化模式和专用DNS日志格式:
use rat_quickdns::{logger::init_dns_logger, dns_query, dns_response, dns_error};
use rat_logger::{LoggerBuilder, LevelFilter, handler::term::TermConfig};
// 1. 调用者初始化基础日志系统
LoggerBuilder::new()
.with_level(LevelFilter::Info)
.add_terminal_with_config(TermConfig::default())
.init_global_logger()?;
// 2. 初始化DNS专用日志格式
init_dns_logger(LevelFilter::Info)?;
// 3. 使用专用DNS日志宏
dns_query!("example.com", "A");
dns_response!("example.com", 2, 45);
dns_error!("查询失败: 超时");
import rat_quickdns
# 创建解析器
resolver = rat_quickdns.DnsResolverBuilder.new() \
.with_strategy("Smart") \
.with_timeout(5) \
.add_udp_upstream("阿里DNS", "223.5.5.5") \
.build()
# 执行查询
response = await resolver.query("example.com", "A")
print(f"查询结果: {response.records}")
src/transport/
- UDP/TCP/DoH/DoT协议实现src/resolver/
- 核心DNS解析逻辑src/builder/
- DnsResolverBuilder统一构建接口src/config/
- 严格配置模式(无兜底默认值)src/python_api/
- PyO3集成# 构建主库
cargo build
# 构建发布版本
cargo build --release
# 运行所有测试
cargo test
# 运行基准测试
cargo bench
# 构建Python绑定
cargo build --features python-bindings
查看 examples/
目录中的完整示例:
smart_dns_example.rs
- 智能DNS查询示例mixed_protocol_test.rs
- 混合协议测试dns_logger_example.rs
- 日志系统使用caller_init_dns_example.rs
- 调用者初始化模式dns_resolver_with_logging.rs
- DNS解析器日志配置mx_record_test_udp.rs
- MX记录查询测试运行示例:
# 智能DNS解析器示例
cargo run --example smart_dns_example
# 混合协议测试
cargo run --example mixed_protocol_test
# 日志系统示例
cargo run --example dns_logger_example
# 调用者初始化示例
cargo run --example caller_init_dns_example
# DNS解析器日志配置
cargo run --example dns_resolver_with_logging
# MX记录查询测试
cargo run --example mx_record_test_udp
本项目采用 LGPL v3 许可证。详见 LICENSE 文件。
欢迎提交Issue和Pull Request!