dig精准可编程适合脚本排错,nslookup交互友好但输出冗长难解析;二者均默认递归查询,但dig不读search域、输出结构化,nslookup易受本地配置干扰。

dig 和 nslookup 都是 Linux 下常用的 DNS 查询工具,但它们设计目标、输出格式和适用场景有明显差异。掌握两者的核心用法与典型技巧,能快速定位域名解析问题、验证 DNS 配置或调试 CDN/负载均衡策略。
dig:精准、可编程、适合脚本和排错
dig(Domain Information Groper)功能强大、输出结构清晰,默认使用 UDP 查询,支持丰富选项,是运维和自动化脚本的首选。
- 查 A 记录最简写法:
dig example.com(默认查 A 记录) - 指定 DNS 服务器(绕过系统 resolv.conf):
dig @8.8.8.8 example.com A - 只显示答案部分(去噪):
dig +short example.com,适合管道处理,如dig +short www.baidu.com | head -1 - 查看完整响应链(含权威服务器和缓存状态):
dig +trace example.com,模拟递归过程,从根服务器开始逐级查询 - 查 DNSSEC 状态:
dig +dnssec example.com,配合+short可快速判断是否启用签名 - 批量查询多个域名(需配合 shell):
cat domains.txt | xargs -I{} dig +short {}
nslookup:交互式友好,适合快速手动验证
nslookup 更偏向交互式操作,历史久、兼容性好,但输出较冗长、不便于脚本解析。新版系统中已逐步被 dig 替代,但在某些嵌入式或旧环境仍常见。
瑞宝通B2B系统使用当前流行的JAVA语言开发,以MySQL为数据库,采用B/S J2EE架构。融入了模型化、模板、缓存、AJAX、SEO等前沿技术。与同类产品相比,系统功能更加强大、使用更加简单、运行更加稳 定、安全性更强,效率更高,用户体验更好。系统开源发布,便于二次开发、功能整合、个性修改。 由于使用了JAVA开发语言,无论是在Linux/Unix,还是在Windows服务器上,均能良好运行
- 非交互模式直接查:
nslookup example.com(默认用 /etc/resolv.conf 中的 nameserver) - 指定 DNS 服务器:
nslookup example.com 114.114.114.114 - 切换查询类型(进入交互模式后):
nslookup→ 输入set type=mx→ 再输入gmail.com - 查 NS 记录并列出所有权威服务器:
nslookup -type=ns example.com - 禁用递归查询(只问授权服务器):
nslookup -norecurse example.com 8.8.8.8
关键区别与选用建议
两者底层都发 DNS 查询包,但行为逻辑不同:
- dig 不读取 /etc/resolv.conf 的 search 域,而 nslookup 默认会追加 search 域尝试解析(可能造成误判)
- dig 默认不进行递归查询?错——它默认发送 RD=1(Recursion Desired),由上游服务器决定是否递归;nslookup 同理,但交互模式下易混淆
- dig 输出可预测、字段固定,适合 grep/awk 处理;nslookup 输出含提示文字,解析困难
- 排查本地 DNS 缓存问题时,优先用
dig @127.0.0.1或nslookup example.com 127.0.0.1直连本地 resolver - 在容器或 minimal 系统中,若只有 busybox nslookup,可用
nslookup -q=txt o-o.myaddr.l.google.com快速查出口 IP
实用组合技巧
单靠一个命令常不够,结合使用更高效:
- 对比不同 DNS 解析结果(排查污染或调度异常):
for s in 8.8.8.8 114.114.114.114 223.5.5.5; do echo "== $s =="; dig @$s example.com +short; done - 查某域名是否被劫持(比对权威 NS 返回):
先dig +short example.com NS得到权威服务器,再dig @ns1.example.com example.com A直连验证 - 检查 TTL 是否生效:
dig example.com | grep "IN[[:space:]]*A",观察第三列数值变化 - 用 nslookup 快速测 DNS 连通性:
nslookup google.com 8.8.8.8 && echo "OK" || echo "FAIL"
-p 53 指定端口,或用 tcpdump -i lo port 53 抓包确认实际查询行为。









