美好的一天。我正在阅读另一篇关于将主机名解析为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到域的列表。我只想在响应文件中有一个条目,因为我将这个添加到我从防火墙导出的CSV中作为Excel中的另一个“列”。我甚至可以使用多个响应作为分号在一行(或/,|,\,*等)分开。 list2.txt是标准的ascii文件。我在Mac,Linux,Windows上试过EOF。
216.58.219.78
206.190.36.45
173.252.120.6
我现在得到的是什么:
domainlist.txt正在获得list2.txt的完全重复,而结果什么都没有。我运行脚本时屏幕上没有出现错误。
我正在使用Macports运行Mac OS X.
答案 0 :(得分:2)
您的脚本有许多语法和样式错误。最小修复是更改cat
:
for IP in `cat $IPLIST`; do
单引号生成一个文字字符串;反引号(或更喜欢的语法$(cat $IPLIST)
)执行命令替换,即运行命令并插入其输出。但是你应该修改你的引用,最好是逐行读取文件。我们也可以摆脱useless echo
。
#!/bin/bash
IPLIST="/Users/mymac/Desktop/list2.txt"
while read IP; do
dig -x "$IP" +short | head -1
done < "$IPLIST" >results.csv
答案 1 :(得分:1)
似乎在你的/etc/resolv.conf
中配置了一个不支持反向查找的名称服务器,以及响应为空的原因。
您可以将要使用的DNS服务器传递给dig
命令。让我们说8.8.8.8
(谷歌),例如:
dig @8.8.8.8 -x "$IP" +short | head -1
命令返回附加了.
的域。如果你想要替换它,你可以另外管道到sed
:
... | sed 's/.$//'