使用 DIG 进行批量反向 DNS 查询

使用 DIG 进行批量反向 DNS 查询

我想对特定名称服务器进行批量反向 DNS 查询。

目前,在搜索这里和谷歌之后。我当时使用以下命令使其适用于 1 个条目:

dig @NAMESERVER -x 10.10.10.10 +short

这正是我想要的。但如果我想对多个 IP 地址执行此操作,则会失败。我所做的是列出 2 个 IP 地址来进行测试。

我正在尝试使用以下命令:

dig @NAMESERVER -x -f dnsquery.txt +short

这没有显示任何结果,我做错了什么?

输入文件有 2 行,每行有 1 个 IP 地址:

10.10.10.10
10.10.10.11 

答案1

正如thrig所提到的,您可以循环调用dig

例如,您可以使用这个小 bash 脚本并将其保存在名为例如的文件中bulkreverse.sh

#!/bin/bash
filename='ip_in.txt' # name of file with IPs to handle
nameserver='8.8.8.8' # nameserver to query

for ip in `cat $filename`
do
echo 'Handling reverse DNS for $ip'
dig @$nameserver -x $ip +short
done

该变量filename指定带有 IP 地址列表的文件名(例如,每行 IP 地址)。nameserver是要查询的名称服务器。

如果您将脚本保存在名为的文件中,bulkreverse.sh则需要通过运行使其可执行

chmod +x bulkreverse.sh

之后你可以执行它

./bulkreverse.sh

我希望这有帮助!

答案2

如果有很多,那么 GNU Parallel 可能有助于加快处理速度:

nameserver=80.80.81.81
parallel -j100 --retries 3 dig @$nameserver -x {} +short :::: ip_in.txt

答案3

您可以使用awk将正向地址转换为反向地址,然后将结果通过管道传输到dig

awk -F. '{printf "%s.%s.%s.%s.in-addr.arpa\n",$4,$3,$2,$1}' dnsqueries.txt |
    dig +short ptr @NAMESERVER -f -

答案4

您的原始代码不起作用的原因是因为-x需要包含在从文件读取的每一行数据中。这在手册页中有记录,但我个人认为它可能更清楚:

-f file批处理模式:dig从给定文件中读取要处理的查找请求列表。文件中的每一行的组织方式应与dig使用命令行界面作为查询呈现的方式相同。

最后一句是解释者,该行必须是“以同样的方式组织它们将作为查询来挖掘“。换句话说,您的示例文件需要包含以下内容:

-x 10.10.10.10
-x 10.10.10.11 

假设您的文件是不变的,我们可以使用它sed来预先添加必要的内容-x,然后将结果通过管道传输到dig

sed 's/^/-x /' dnsquery.txt | dig +short -f -

相关内容