Unix:如何测试 ip 地址解析为名称。
我需要检查是否可以通过 shell 脚本使用 DNS 条目将 IP 地址解析为名称。
代码:
DNS_Lookup()
{
LOOKUP=$(nslookup $1)
FAIL_COUNT=$(echo $LOOKUP | grep "** server can't find " | wc -l);
if [ $FAIL_COUNT -eq 1 ];then
echo "Unable to resolve DNS for $1"
else
echo "IP:$1 DNS Name:$(echo $LOOKUP | grep -v nameserver | cut -f 2 | grep name | cut -f 2 -d "=" | sed 's/ //')"
return 0
fi
}
DNS_Lookup 192.168.27.191
上面的代码并不适用于所有可能的情况。操作系统:CentOS
答案1
您可以使用getent
带有hosts
参数的命令,如下所示:
getent hosts www.google.com
并计算得到多少个结果:
getent hosts www.google.com | wc -l
getent
使用名称服务切换库来执行各种名称查找。使用第二个参数,您可以定义要查找的数据库类型。检查man getent
详情。
答案2
展示了两种可能的可移植方法。
#!/bin/sh
reverseDNS=$(host 8.8.8.8)
if [ $? != 0 ]; then
printf '%s\n' "Reverse DNS [FAILED]"
else
printf '%s\n' "Reverse DNS [OK]"
fi
###### nslookup ##########
nslookup_func(){
nslookup=$(nslookup google.com)
if [ "$nslookup" = ";; connection timed out; no servers could be reached" ]; then
printf '%s\n' "nslookup [FAILED]"
else
printf '%s\n' "nslookup [OK]"
fi
}
nslookup_func