如何在bash中使用nslookup来验证DNS配置是否正确?

如何在bash中使用nslookup来验证DNS配置是否正确?,bash,nslookup,Bash,Nslookup,我主要想通过使用nslookup检测DNS在机器上是否正确配置。不幸的是,当nslookup无法查找条目时,它似乎仍然返回成功错误代码。另外,不同的查询可能会返回多个结果,这使得测试变得更加困难 因此,我想编写一个bash代码段,如果dns条目解析成功,它将返回success。我不在乎我是否得到多个结果 示例nslookup-type=srv\u ldap.\u tcp.DOMAIN.COM同意这样一个事实,nslookup,对于成功和失败的DNS查找返回0。您可以实现您想要做的事情,但需要对命

我主要想通过使用
nslookup
检测DNS在机器上是否正确配置。不幸的是,当nslookup无法查找条目时,它似乎仍然返回成功错误代码。另外,不同的查询可能会返回多个结果,这使得测试变得更加困难

因此,我想编写一个bash代码段,如果dns条目解析成功,它将返回success。我不在乎我是否得到多个结果


示例
nslookup-type=srv\u ldap.\u tcp.DOMAIN.COM

同意这样一个事实,
nslookup
,对于成功和失败的DNS查找返回
0
。您可以实现您想要做的事情,但需要对命令的输出进行后处理

您可以使用以下内容创建一个
dnsLookup.sh
脚本

#!/bin/bash

# Checking for the resolved IP address from the end of the command output. Refer
# the normal command output of nslookup to understand why.

resolvedIP=$(nslookup "$1" | awk -F':' '/^Address: / { matched = 1 } matched { print $2}' | xargs)

# Deciding the lookup status by checking the variable has a valid IP string

[[ -z "$resolvedIP" ]] && echo "$1" lookup failure || echo "$1" resolved to "$resolvedIP"
正在运行一些示例URL

dudeOnMac:~$ ./dnsLookup.sh www.google.com
www.google.com resolved to 206.78.111.12
dudeOnMac:~$ ./dnsLookup.sh www.googlejunkaddress.com
www.googlejunkaddress.com lookup failure

诀窍是使用
host | grep
命令而不是
nslookup
,因为这个命令不太冗长,更容易用grep解析

如果DNS解析失败,以下命令将失败:

host -t srv _ldap._tcp.EXAMPLE.COM | grep "has SRV record" >/dev/null ||     {
    echo "FATAL: Unable to locate ldap servers, probably you are not on intranet or your DNS servers are broken."
    exit 2
}

注意:如您所见,我的示例特定于
SRV
查询,但您可以轻松地修改参数和grep过滤器,以使其与其他人一起工作。

正确的解决方案是使用dig和test,如果有带short选项的文本:

[ "$(dig +short -t srv _ldap._tcp.example.com.)" ] && echo "got answer"

并非总是失败:
host-tsrv\u ldap.\u tcp.EXAMPLE.COM。;回声$_ldap.\u tcp.EXAMPLE.COM没有SRV记录0
。看看我的完整命令,它将输出通过管道传输到grep,如果grep没有进行匹配,它将返回一个错误代码。因此,只有当host命令的输出包含
具有SRV记录时,这一行才会成功,这正是我要查找的。谢谢!我的也能用,但我得承认你的更简短,更容易阅读。