使用脚本让 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
加载中...
10票,平均分:1.00/110
191
X Facebook Hatena书签 口袋

这篇文章的作者

关于作者

我经常在录音棚里演奏乐器和练习。

我也喜欢看漫画和看电影(尤其是恐怖电影)。