简介
dog 是一款使用 Rust 编写的现代化 DNS 查询工具,由 exa(eza 的前身)的作者 ogham 开发。它作为传统 dig 命令的替代品,提供了更简洁的语法、彩色高亮的输出以及对 DNS-over-TLS 和 DNS-over-HTTPS 等现代协议的原生支持。
与 dig 繁杂的输出格式不同,dog 默认只展示最关键的查询结果,输出清晰易读。它还支持 JSON 输出格式,便于脚本处理和自动化。对于需要频繁进行 DNS 调试和排查的开发者和运维人员,dog 是一个极佳的效率工具。
安装
# macOS
brew install dog
# Linux (下载预编译二进制)
# 请从 GitHub Releases 页面下载对应平台的二进制文件
# Cargo
cargo install dog-dns
核心特性
- 简洁输出: 默认展示关键信息,比 dig 更加清晰易读
- 彩色高亮: 不同记录类型使用不同颜色,一目了然
- 现代协议: 原生支持 DNS-over-TLS (DoT) 和 DNS-over-HTTPS (DoH)
- JSON 输出: 支持 JSON 格式输出,方便程序化处理
- 多记录类型: 支持 A、AAAA、MX、TXT、CNAME、NS 等所有常见记录类型
- 灵活语法: 参数顺序自由,使用直观
使用示例
# 查询 A 记录
dog example.com
# 查询特定记录类型
dog example.com MX
dog example.com AAAA
dog example.com TXT
# 指定 DNS 服务器
dog example.com @8.8.8.8
dog example.com @1.1.1.1
# 使用 DNS-over-HTTPS
dog example.com --https @https://cloudflare-dns.com/dns-query
# 使用 DNS-over-TLS
dog example.com --tls @dns.google
# 输出 JSON 格式
dog example.com A --json
# 查询多种记录类型
dog example.com A AAAA MX NS
# 显示查询耗时
dog example.com --time
典型场景
场景一:调试 DNS 解析问题
网站打不开?先排查 DNS:
# 对比系统默认 DNS 和 Google DNS 的解析结果
dog example.com A
dog example.com A @8.8.8.8
# 查看完整的 DNS 解析链(MX + A)
dog example.com A MX NS
# 检查 SPF 记录(邮件发送问题排查)
dog example.com TXT | grep spf
场景二:验证 DNS 记录是否生效
域名迁移或新记录添加后,确认是否已在公共 DNS 上生效:
# 同时查询多个公共 DNS 服务器
dog newdomain.com A @8.8.8.8 # Google
dog newdomain.com A @1.1.1.1 # Cloudflare
dog newdomain.com A @9.9.9.9 # Quad9
# 若结果一致,说明 DNS 已全球传播
场景三:使用 DoH 绕过 DNS 污染
在某些网络环境下,普通 DNS 请求可能被污染或劫持:
# 通过 HTTPS 查询,加密且防篡改
dog github.com A --https @https://cloudflare-dns.com/dns-query
dog github.com A --https @https://dns.google/dns-query
# 结果输出为 JSON,便于脚本处理
dog github.com A --https @https://1.1.1.1/dns-query --json \
| jq '.answers[].data'