【问题标题】:bash script to perform dig -x执行 dig -x 的 bash 脚本
【发布时间】:2015-04-25 05:55:33
【问题描述】:

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

【问题讨论】:

  • 手动执行时dig -x 是否提供您想要的输出? dig 的手册页说,-f 选项将在给定 IP 地址文件的情况下以批处理模式运行它。也许这是一个更好的起点?
  • 在这种特殊情况下done &lt; domainlist.txt 的意义何在? for 循环根本不需要它。当我测试你的代码(没有 domainlist.txt 的东西)时,唯一可疑的是你没有为cat $IPLIST 使用反引号。我想这是复制粘贴错误?如果不是,那么这就是它不起作用的原因:) 更易读的方法是使用for IP in $( cat $IFLIST ); do
  • @tgo,您的建议解决了这个问题。我无法选择你作为答案。
  • @user1141869 没有问题,很高兴它有帮助。

标签: bash dig


【解决方案1】:

您的脚本有许多语法和文体错误。最小的解决方法是更改​​ 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

【讨论】:

  • 根据您的 cmets,我猜 domains.txt 从一开始就没有用处或没有必要。如果需要,请更新您的问题以说明其用途。
【解决方案2】:

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

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

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

这些命令返回附加了. 的域。如果你想替换它,你可以另外通过管道发送到sed

... | sed 's/.$//'

【讨论】:

    猜你喜欢
    • 2019-07-28
    • 1970-01-01
    • 2016-07-11
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    相关资源
    最近更新 更多