使用脚本让 dig 命令更高效!

介绍
大家好,我是Kita,一名大三的工程师。
大家通常是如何使用dig(Domain Information Groper,域名信息查询工具)命令的呢?这个命令经常用于检查域名设置。
这次,我想介绍一些使用脚本简化dig命令的方法!
挖掘命令
重申一下,dig(域名信息查询工具)命令是基础设施工程师必备且便捷的工具,用于查询 DNS 服务器,例如“此域名的 IP 地址是什么?”和“邮件服务器在哪里?”。
dig 命令公司博客我们已
虽然 dig 命令很有用,但它有以下两个缺点:
1.类型指定的局限性:
由于 dig 一次只能查询一种记录类型,即使您像这样列出所有类型(例如“dig domain A MX ”),也只会查询最后指定的 MX 记录。
因此,如果要检查多种类型,则需要分别对每种类型运行 dig 命令。
2.ANY 查询的过时:
以前,指定一个域名(例如“dig beyondjapan.com ANY ”)可以一次性检索该域名下的多个记录集。
互联网工程任务组 (IETF) 制定的 RFC8482 现在的实现通常只对 ANY 查询返回最简响应。
[任何失败案例示例]
beyondjapan.com. 3600 IN HINFO "RFC8482" "
* HINFO "RFC8482" 是服务器的拒绝响应,表示“我们不提供批量响应,所以请单独提出请求”。
使用脚本自动进行连续查询
如果 `dig` 命令无法一次性检索所有数据,通常需要手动多次输入该命令。
然而,随着待搜索记录数量的增加,这种方法会变得更加耗时,而且也更容易出错,例如遗漏某些信息。
分开,来省去多次手动重新输入命令的麻烦,并一次性准确地检索多个记录调查项目(txt)”和“执行程序(script)!
如何执行脚本
① 创建待调查记录列表。
首先,在本地环境(Ubuntu / WSL 等)中,创建一个名为 records.txt 的文本文件,其中列出您要针对目标域调查的记录类型,每行一个。然后,切换到以下目录并按如下方式进行准备。
vi records.txt
■ records.txt 的内容
A MX TXT NS
② 创建执行脚本
接下来,创建一个脚本 (dig-check.sh),该脚本会自动读取上述列表 (records.txt) 并重复执行 dig 命令。
*由于 records.txt 和 dig-check.sh 都是通过在脚本中指定 records.txt 的文件名来创建的,因此请将它们创建在同一目录下,以防止出现读取错误(文件未找到)!
vi dig-check.sh
■ dig-check.sh 的内容
#!/bin/bash DOMAIN=$1 # 如果未指定域名,则显示错误 if [ -z "$DOMAIN" ]; then echo "用法:./dig-check.sh [域名]" exit 1 fi echo "--- 域名:$DOMAIN ---" # 逐行读取并执行 records.txt while read type; do # 如果存在空行则跳过 [ -z "$type" ] && continue echo ""[$type 记录]" dig $DOMAIN $type +short echo "" done < records.txt
③ 授予脚本执行权限
在步骤 ② 中创建的脚本 (dig-check.sh) 尚未被识别为“可执行的文件”。
■脚本(dig-check.sh)创建后的权限状态
-rw-r--r-- 1 root root 453 2月 26 17:59 dig-check.sh
输入以下命令授予权限:
chmod +x dig-check.sh
■ 调整后脚本 (dig-check.sh) 的权限状态
-rwxr-xr-x 1 root root 453 2月26日17:59 dig-check.sh
*由于 records.txt 是一个文本文件,因此无需进行此操作。
文本文件(records.txt):该脚本仅“读取”其内容,因此可以使用标准权限(-rw-r--r--)运行。
脚本文件(dig-check.sh):必须设置权限,因为操作系统需要获得运行此脚本的权限(+x:执行权限)。
④ 指定域名并运行。
这次,我们以“example.com”为例运行。
这样,脚本会一次性输出records.txt文件中的所有内容,方便您更快地检查设置!
* ./ 表示“在当前目录下执行文件”,因此如果您当前位于其他目录,请在运行脚本前切换到目标目录。
./dig-check.sh example.com
■ 输出结果
--- 域名:example.com --- [A 记录] 104.18.27.120 104.18.26.120 [MX 记录] 0 . [TXT 记录] "v=spf1 -all" "_k2n1y4vw3qtb4skdx9e7dxt97qrmmq9" [NS 记录] elliott.ns.cloudflare.com. hera.ns.cloudflare.com.
脚本执行注意事项
这里介绍的批量采集脚本只是一个按顺序检查 records.txt 文件中列出的项目的工具。因此,虽然它很方便,但请注意以下两点!
■找不到未知记录:
例如,如果您只在 records.txt 中列出“A/MX”,即使为目标域设置了 TXT 记录,也不会显示。
■ 无法检查“所有已注册内容”:
由于 DNS 的特性,很难从服务器端获取完整的“已配置记录列表”。
因此,此方法并非旨在“从未知状态获取所有设置”,而是比手动检查更快、更准确地检查预定数量的记录。
结论
“以前你都是一个一个地输入命令”——用 dig 命令检查多个设置。只要稍微动动脑筋,把 txt 文件和脚本分开,就能避免手动执行时漏掉检查等操作错误,还能节省大量时间!
这次我们介绍了检查单个域的多个设置的示例,但在实际应用中,您可能需要检查管理的全部 10 个域。
在这种情况下,您可以通过准备一个域列表(domains.txt)并在脚本中创建一个嵌套循环来实现。
我希望以后有机会能提供更详细的介绍!
希望这篇文章对您有所帮助。
感谢您阅读到最后。
10
