Unix:如何测试 IP 地址解析为名称

Unix:如何测试 IP 地址解析为名称

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 

相关内容