【发布时间】:2014-01-10 21:48:25
【问题描述】:
我正在尝试从多个文件中 grep IP,在 DNS 中查找它们并将它们与相同文件中已有的主机名进行比较,以确保两者都是正确的。然后打印出任何错误的地方。
我已经收集到我需要将信息放入数组并以某种方式区分它们。
这是我可怕的 bash 代码,它不起作用。我很确定至少我的 for 循环是错误的:
declare -a ipaddr=(`grep -h address *test.com.cfg | awk '{print $2}'`)
declare -a host_names=(`grep -h address *test.com.cfg | awk '{print $2}'`)
for i in "${ipaddr[@]}"
do
lookedup_host_names=( $(/usr/sbin/host ${ipaddr[@]} | awk '{print $5}' | cut -d. -f1-4 | tr '[:upper:]' '[:lower:]'))
done
if [[ -z diff <(printf "%s\n" "${lookedup_host_names[@]}"| sort ) <(printf "%s\n" "${host_names[@]}"| sort) ]]
then
printf "%s\n" "${lookedup_host_names[@]}"
fi
【问题讨论】:
-
有几个注意事项需要考虑。反向主机查找可能会返回主机名,但文件可能包含 CNAME。正向查找将返回所有 CNAME,而不仅仅是 IP 地址。最简单的方法是使用
gethostip使用-d选项返回IP 地址,而不考虑CNAME。唯一需要注意的是多个 IP。当使用gethstip -d时,具有多个 IP 地址的 DNS 名称将只返回一个 IP 地址。
标签: bash