dig 使用详尽手册¶
面向 CTF / 渗透测试 与 日常排错的 dig 参考手册:基本用法、常用选项、输出字段解释、进阶技巧和大量示例。
1) 基本命令结构¶
dig [@server] [name] [type] [options]
@server:查询的 DNS 服务器(可选),例如@8.8.8.8。name:要查询的域名或 IP(反向查询见-x)。type:记录类型(A, AAAA, MX, TXT, NS, SOA, CNAME, PTR, SRV, ANY, AXFR 等)。options:dig 的+开头的特殊选项(如+short、+trace等)。
示例:
# 查询 A 记录(默认)
dig example.com A
# 查询 TXT 记录
dig example.com TXT
# 使用特定 DNS 服务器查询
dig @1.1.1.1 example.com A
2) 常用记录类型(-t 或直接写类型)¶
A:IPv4 地址。AAAA:IPv6 地址。MX:邮件交换记录。TXT:文本记录(常包含 SPF、验证字符串等)。NS:权威域名服务器。SOA:Start of Authority(区域起始记录)。CNAME:别名记录。PTR:反向查找(IP -> 域名)。SRV:服务记录(例如 XMPP、SIP)。DNSKEY/RRSIG/DS:DNSSEC 相关记录。ANY:请求所有可返回类型(现代 DNS 对 ANY 常有限制)。AXFR:区域传输(zone transfer)。
示例:
dig -t TXT example.com
3) 重要选项与 + 开关(实战常用)¶
+short:只显示关键结果,便于脚本化。例:
dig +short example.com A。
+noall +answer:只显示 ANSWER 部分,清爽可读。例:
dig example.com +noall +answer。
+trace:递归追踪(从根服务器开始),用于排查委派/传播问题。例:
dig +trace example.com。
+tcp:强制使用 TCP(默认 UDP),用于较大响应或调试。+dnssec:请求并显示 DNSSEC 相关(RRSIG、DNSKEY)。+time=SECONDS:设置超时(秒)。+tries=N:重试次数。+multiline:把长记录分行显示(便于阅读 TXT/SPF)。+qr:显示 query/response header(调试低层头信息)。+nocomments:去掉输出中注释行。+noedns/+edns=0:禁用/设置 EDNS。+bufsize=NNN:设置 EDNS buffer size。-x:反向 PTR 查询(IP -> 名称)。例:
dig -x 8.8.8.8 +short。
4) 输出结构(典型 dig example.com)¶
; <<>> DiG 9.x.x <<>> example.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12345
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
;; QUESTION SECTION:
;example.com. IN A
;; ANSWER SECTION:
example.com. 3600 IN A 93.184.216.34
;; AUTHORITY SECTION:
...
;; ADDITIONAL SECTION:
...
;; Query time: 15 msec
;; SERVER: 8.8.8.8#53(8.8.8.8)
;; WHEN: Sat Sep 20 15:00:00 UTC 2025
;; MSG SIZE rcvd: 123
HEADER:状态码(NOERROR、NXDOMAIN 等)与标志(qr, aa, rd, ra, ad)。QUESTION:查询的问题。ANSWER:返回的记录(最重要)。AUTHORITY:权威 NS 信息(委派信息)。ADDITIONAL:附加记录(如 NS 的 A/AAAA)。Query time/SERVER/WHEN:性能与所用服务器信息。
提示:想要最简洁的结果,用 +short 或 +noall +answer。
5) 常见实战命令(CTF / 渗透场景)¶
快速只看 IP:
dig +short example.com A
查看 MX:
dig +short example.com MX
查看 TXT(SPF 等)并按行展示:
dig example.com TXT +multiline +noall +answer
# 或
dig +short TXT example.com
反向查 IP:
dig -x 203.0.113.5 +short
指定 DNS 服务器(例如 8.8.8.8):
dig @8.8.8.8 example.com A
使用 TCP(防止 UDP 截断):
dig +tcp example.com ANY
追踪解析路径(从根开始):
dig +trace example.com
检查 DNSSEC 签名(显示 RRSIG):
dig example.com DNSKEY +dnssec
dig example.com A +dnssec
尝试 zone transfer(AXFR):
dig @ns1.example.com example.com AXFR
注意:大多数权威 NS 已禁用 AXFR 给任意客户端;若成功则可直接获得完整 zone,常见 CTF 漏洞点。
列出域名服务器(NS)以及对应 IP(用于后续 AXFR 测试):
dig example.com NS +short
dig @<ns> example.com AXFR
查询 SOA(序列号、refresh 等):
dig example.com SOA +noall +answer
查询某子域名:
dig spf.example.com TXT +short
查询所有记录(注意 ANY 在现代 DNS 中被限制):
dig example.com ANY
把 TXT 输出写到文件(脚本场景):
dig example.com TXT +short > txt_records.txt
批量查询(Bash 单行示例):
for d in $(cat domains.txt); do echo "---- $d ----"; dig +short $d TXT; done
6) 进阶:解析子域发现 / 被动信息搜集的组合命令¶
把
dig与crt.sh、amass、subfinder、massdns等工具配合使用,用于子域发现与验证。在 CTF 中的实战流程常是:
用
crt.sh/SecurityTrails/VirusTotal找子域候选列表。用
dig +short批量验证哪些子域存在以及它们的 A/TXT/MX 记录。对可疑 NS 做 AXFR 测试、对 IP 做反向/证书分析。
示例:
# crt.sh 结果保存为 domains.txt 后批量验证 TXT
for d in $(cat domains.txt); do dig +short $d TXT; done
7) 常见 Pitfall(踩坑与调试提示)¶
dig +short不显示状态或头信息——仅用于脚本或快速确认。ANY在现代 DNS 中经常被过滤或返回部分记录(不可靠)。出现
status: NXDOMAIN表示域名不存在或未被委派。dig @ns example.com AXFR若成功说明 NS 配置错误—这是重要漏洞。使用
+trace可以定位是哪一级的委派配置不正确。对于很长的 TXT/SPF 记录,使用
+multiline更易阅读和复制。
8) 快速参考表(Cheat sheet)¶
命令 |
说明 |
|---|---|
|
只显示 A 记录 IP |
|
只显示 MX 主机(简洁) |
|
可读的 TXT(SPF)输出 |
|
反向 PTR |
|
指定 DNS 服务器查询 |
|
从根开始的解析追踪 |
|
查询 DNSSEC 公钥/签名 |
|
尝试 zone transfer(AXFR) |
|
查看 SOA 记录(serial 等) |
|
用 TCP 请求 ANY(注意被限制) |
9) 示例(实战案例)¶
查看 SPF(分行显示,便于复制):
dig example.com TXT +multiline +noall +answer
检查某个 NS 是否允许 zone transfer:
for ns in $(dig +short example.com NS); do echo "TRY $ns"; dig @$ns example.com AXFR; done
用 8.8.8.8 强制 TCP 并只看 ANSWER:
dig @8.8.8.8 example.com A +tcp +noall +answer
追踪子域委派问题(为什么
sub.example.com解析不到):
dig +trace sub.example.com
10) 推荐练习(快速上手)¶
用
dig +short检查google.com、github.com的 A/AAAA/MX/TXT。找一个 CTF 目标域名,跑
dig <domain> NS,再对 NS 尝试AXFR(注意合法性)。用
dig +trace观察某个新注册域名的解析链路。在本地脚本里把
dig +short的输出作为后续脚本的输入(自动化批量核验)。
如果你需要:
我可以把这个 Markdown 导出为 PDF;
或生成一个一键 bash 脚本:输入域名自动跑常用查询并把结果归档。
告诉我你想要哪一种,我来直接生成。