2

再会。我正在阅读另一篇关于将主机名解析为 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。

4

2 回答 2

2

您的脚本有许多语法和文体错误。最小的解决方法是更改​​周围的引号cat

for IP in `cat $IPLIST`; do

单引号产生一个文字字符串;反引号(或更受欢迎的语法$(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
于 2015-02-24T08:35:37.520 回答
1

似乎在您/etc/resolv.conf配置了一个不支持反向查找的名称服务器,这就是响应为空的原因。

您可以将要使用的 DNS 服务器传递给dig命令。比方说8.8.8.8(谷歌)例如:

dig @8.8.8.8 -x "$IP" +short | head -1

这些命令返回带有.附加的域。如果要替换它,您可以另外通过管道传输到sed

... | sed 's/.$//'
于 2015-02-23T19:55:28.303 回答