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

介绍
大家好,我是Kita,一名大三的工程师。dig
(Domain Information Groper,域名信息查询工具)命令常用于检查域名设置,但日常使用中该如何使用呢?
今天,我想介绍一些使用脚本来提高dig命令效率的技巧!
挖掘命令
重申一下,dig(域名信息查询工具)命令是一个非常实用的工具,对于基础设施工程师来说至关重要,因为它能够向 DNS 服务器发送诸如“此域名的 IP 地址是什么?”和“邮件服务器在哪里?”之类的查询。
我们已经博客dig 命令
虽然 dig 命令很有用,但它有以下两个缺点:
1.类型指定的限制:
dig 每次执行只能查询一种记录类型,因此即使您像这样列出“ dig domain A MX ”,也只会查询最后指定的 MX 记录。
所以,如果要检查多种类型,需要分别运行每种类型的命令。
2. ANY 查询已沦为形式:
以前,您可以通过指定类似
dig beyondjapan.com ANY 互联网工程任务组 (IETF) 制定的RFC8482实现通常只会对 ANY 查询返回最小响应。
[任何失败案例示例]
beyondjapan.com. 3600 IN HINFO "RFC8482" "
* HINFO "RFC8482" 是服务器的拒绝响应,表示“我们不提供批量响应,所以请单独提出请求”。
使用脚本自动进行连续查询
如果 dig 命令无法一次性检索所有记录,通常需要手动多次输入该命令。
然而,随着待搜索记录数量的增加,这种方法会变得更加耗时,而且更容易出错,例如漏选某个记录。
因此,这次我们将介绍一种分别执行“调查项目(txt) ”和“可执行程序(脚本) ”的方法,这将省去您一遍又一遍手动重新输入命令的麻烦,并允许您一次性准确地检索多个记录!
如何执行脚本
① 创建要调查的记录列表。
首先,在本地环境(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),并使用双循环运行脚本。
我希望以后能提供更详细的介绍!
希望这篇文章对您有所帮助。
感谢您阅读到最后。
5