如何仅返回空的或有问题的DNSlogging以用于批量查询

在进行logging的批量input时,我想通过使用dig执行批量查询来validation每个logging是否放在正确的位置。 将吐出所有积极的结果:

dig +noall +answer 

要么

 dig +short 

如另一个问题的答案中所指出的那样,

 dig +noall +question +answer 

但是,这仍然显示所有“正面”输出,使您可以通过批量输出在行的起始处连续search两个分号来标识不返回任何内容的logging。

我正在寻找的是一个命令(不必是Dig),它将只返回错误或只显示没有结果的logging,这样只显示那些logging,而不是正确inputlogging的典型输出。

许多方法来做到这一点…只是一些简单的脚本。 即使是你引用的问题中的Python响应。

  • 多次调用DIG而不是使用批量文件一次。 这返回1行失败,2行或更多行。 基于通过/失败的回声名称。

  • 使用您最喜欢的脚本语言的DNS查找方法,并评估返回码。 我喜欢powershell,为此,您将使用[System.Net.Dns]::GetHostByAddress("fully.qualified.domain.name")

  • 使用批量文件调用DIG一次,并将输出(正则expression式)正则expression式。 下面的示例,再次在PowerShell中。 如果你是一个unix的人,正则expression式也在那里。 我很多年前就使用过SED,但是现在可能有更简单的方法。

Z Z

 [string]$digout = dig +noall +answer +question goodname1 goodname2 badname1 goodname3 badname2 $digout = $digout -replace ("\r\n", "") $digout.split(";") | select-string -notmatch "\d\s+IN" 

将返回:

 badname1. IN A badname2. IN A 

第一行将DIG输出以stringforms分配给var而不是数组。 这是必要的,因为正则expression式在string而不是数组上工作。 第二行删除该变种的CR / LF。 第3A部分行分裂var,以便每个问题和它的答案出现在同一行。 第3B部分过滤文本,只显示没有答案的问题。

这样的事情在脚本语言中会容易得多。 例如,在Python中,错误的查找会引发exception:

 Python 3.5.1 (default, Mar 3 2016, 09:29:07) [GCC 5.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import socket >>> socket.gethostbyname('google.com') '216.58.216.78' >>> socket.gethostbyname('alsdkfjowiejlskdjf.com') Traceback (most recent call last): File "<stdin>", line 1, in <module> socket.gaierror: [Errno -2] Name or service not known 

所以这只是一个做你所有的查找的问题,只打印出你的尝试抓住的结果。