1 unstable release
Uses new Rust 2024
| 0.1.0 | Dec 31, 2025 |
|---|
#1672 in Network programming
23KB
448 lines
rdig - DNS Query Tool using dns.google
一个类似 dig 的 DNS 查询工具,支持 dns.google 的两种请求方式:JSON 格式和 RFC 标准格式。
功能特性
- ✅ JSON 格式请求 - 通过
https://dns.google/resolve端点 - ✅ RFC 标准格式请求 - 通过
https://dns.google/dns-query端点(DNS wireformat) - ✅ 类似 dig 的输出格式 - 熟悉的 DNS 查询结果显示
- ✅ 支持多种 DNS 记录类型 - A, AAAA, MX, NS, TXT, CNAME, SOA 等
- ✅ DNSSEC 支持 - 可选的 DNSSEC 验证
安装和编译
cd /Users/dilfish/rs/rdig
cargo build --release
编译完成后,可执行文件位于 ./target/release/rdig
使用方法
基本用法
# 查询 A 记录(默认)
./target/release/rdig google.com
# 查询特定记录类型
./target/release/rdig google.com -r MX
./target/release/rdig google.com -r NS
./target/release/rdig github.com -r AAAA
命令行选项
Usage: rdig [OPTIONS] <DOMAIN>
Arguments:
<DOMAIN> 要查询的域名
Options:
-r, --record-type <RECORD_TYPE> DNS 记录类型 (A, AAAA, MX, NS, TXT, CNAME, SOA 等)
[default: A]
-f, --format <FORMAT> 查询格式
- json: JSON 格式响应(默认)
- rfc: RFC 标准格式(DNS wireformat)
[default: json]
-d, --dnssec 启用 DNSSEC 验证
-r, --recursive 启用递归搜索 [default: true]
-h, --help 显示帮助信息
使用示例
查询 A 记录(JSON 格式)
$ ./target/release/rdig google.com
; <<>> rdig google.com
; (json format)
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 0
;; flags: qr ra rd; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 37 IN A 172.253.118.138
google.com. 37 IN A 172.253.118.100
google.com. 37 IN A 172.253.118.102
google.com. 37 IN A 172.253.118.139
google.com. 37 IN A 172.253.118.101
google.com. 37 IN A 172.253.118.113
;; Query time: 0 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Dec 31 14:33:04 +08:00 2025
;; MSG SIZE rcvd: 0
查询 MX 记录
$ ./target/release/rdig google.com -r MX
; <<>> rdig google.com
; (json format)
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 0
;; flags: qr ra rd; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN MX
;; ANSWER SECTION:
google.com. 300 IN MX 10 smtp.google.com.
;; Query time: 0 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Dec 31 14:33:22 +08:00 2025
;; MSG SIZE rcvd: 0
使用 RFC 格式查询
$ ./target/release/rdig google.com -f rfc
; <<>> rdig google.com
; (rfc wireformat)
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 0
;; flags: qr ra rd; QUERY: 0, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; Query time: 0 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Wed Dec 31 14:33:13 +08:00 2025
;; MSG SIZE rcvd: 0
依赖项
reqwest- 异步 HTTP 客户端tokio- 异步运行时serde&serde_json- JSON 序列化/反序列化clap- 命令行参数解析anyhow- 错误处理chrono- 时间处理
项目结构
rdig/
├── Cargo.toml # 项目配置和依赖
├── Cargo.lock # 依赖锁定文件
├── src/
│ └── main.rs # 主程序源码
└── target/ # 编译输出目录
技术细节
JSON 格式请求
- 使用
https://dns.google/resolve端点 - 发送 GET 请求,在 URL 参数中指定域名和记录类型
- 响应是 JSON 格式,包含完整的 DNS 响应信息
RFC 标准格式请求
- 使用
https://dns.google/dns-query端点 - 构建 RFC 1035 标准格式的 DNS 查询包
- 发送 POST 请求,Content-Type 为
application/dns-message - 响应是二进制 DNS wireformat
未来改进
- 完整的 RFC wireformat 响应解析
- 显示更详细的 Authority 和 Additional 信息
- 支持查询统计信息
- 支持更多的 DNS 扩展功能
- 输出格式自定义选项
许可证
MIT
Dependencies
~9–25MB
~293K SLoC