我正在尝试编写一个 shell 脚本来执行反向 DNS 查找,但无法让它工作。
基本上我想这样做:
dig -x 8.8.8.8 +short
输出将是这样的:google-public-dns-a.google.com
。我想将其发送到输出文件。
目前我的代码如下所示。
#!/bin/bash
#Read a file where per line there will be an IP address. The .in file is the input/sourcelist from which IP addresses are read
cat reverse_dns_lookup.in | while read line
#
do
# Do a reverse lookup
dig -x $line +short
done
当我运行脚本时,似乎没有发生任何事情,所以我的想法是我不会调用,dig
而是首先像这样测试脚本:
echo dig -x $line +short
即使这样也不会产生任何输出。我在这里缺少什么?
答案1
假设reverse_dns_lookup.in
包含
-x 8.8.8.8
-x 127.0.0.1
然后:
$ dig -f reverse_dns_lookup.in +short
google-public-dns-a.google.com.
localhost.
要将其添加-x
到现有文件的内容中并dig
在不修改文件的情况下调用,请使用进程替换:
$ dig -f <( sed 's/^/-x /' reverse_dns_lookup.in ) +short
这避免了dig
在循环中多次调用,并且避免了解析reverse_dns_lookup.in
带有read
.
然后将输出重定向到您选择的文件:
$ dig -f <( sed 's/^/-x /' reverse_dns_lookup.in ) +short >dig-results.txt
为了能够将 IP 地址与成功查询的结果配对:
$ dig -f <( sed 's/^/-x /' reverse_dns_lookup.in ) +noall +answer | awk '{ print $1, $NF }' >dig-results.txt
对于我使用的示例文件,这将给出
8.8.8.8.in-addr.arpa. google-public-dns-a.google.com.
1.0.0.127.in-addr.arpa. localhost.
在dig-results.txt
。
答案2
#!/bin/bash
while read line
do
echo $line - `dig -x "$line" +short`
done < reverse_dns_lookup.in
这段代码对我来说工作得很好。您必须确保该文件reverse_dns_lookup.in
位于正确的位置。
要将输出从脚本发送到文件,只需使用 bash 中的标准 stdin 重定向运算符将其重定向:
./script.sh > output_file.txt
还回答了您对更改的担忧,已将 IP 与 revdns 条目一起显示。