bash脚本执行dig -x

时间:2015-02-23 19:26:55

标签: bash dig

美好的一天。我正在阅读另一篇关于将主机名解析为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.

2 个答案:

答案 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/.$//'