您好。我正在阅读另一篇关于将主机名解析为IP并只使用列表中的第一个IP的帖子。
我想做相反的事情,并使用了以下脚本:
#!/bin/bash
IPLIST="/Users/mymac/Desktop/list2.txt"
for IP in 'cat $IPLIST'; do
domain=$(dig -x $IP +short | head -1)
echo -e "$domain" >> results.csv
done < domainlist.txt
我想给脚本一个从防火墙日志中收集的1000多个IP地址的列表,并将目标IP的列表解析为域。我只想在响应文件中有一个条目,因为我将把它作为Excel中的另一个"列"添加到我从防火墙导出的CSV中。我甚至可以用分号分隔一行(或/、|、\、*等)来使用多个响应。list2.txt是一个标准的ascii文件。我在Mac、Linux和Windows中尝试过EOF。
216.58.219.78
206.190.36.45
173.252.120.6
我现在得到的:
domainlist.txt得到了list2.txt的完全副本,而结果什么都没有。当我运行脚本时,屏幕上也没有出现任何错误。
我正在运行带有Mac端口的Mac OS X。
您的脚本有许多语法和风格错误。最小的修复方法是更改cat
:周围的引号
for IP in `cat $IPLIST`; do
单引号产生一个文字字符串;backticks(或更优选的语法$(cat $IPLIST)
)执行命令替换,即运行命令并插入其输出。但你应该修正你的引用,最好逐行阅读文件。我们还可以去掉无用的echo
。
#!/bin/bash
IPLIST="/Users/mymac/Desktop/list2.txt"
while read IP; do
dig -x "$IP" +short | head -1
done < "$IPLIST" >results.csv
似乎在/etc/resolv.conf
中配置了一个不支持反向查找的名称服务器,这就是为什么响应为空的原因。
您可以将要使用的DNS服务器传递给dig
命令。比方说8.8.8.8
(谷歌):
dig @8.8.8.8 -x "$IP" +short | head -1
命令返回附加了.
的域。如果你想更换它,你可以额外管道到sed
:
... | sed 's/.$//'