Como retornar apenas registros DNS vazios ou "problemáticos" para consultas em massa

1

Ao fazer uma entrada em massa de registros, quero verificar se coloquei cada um em seu local correto fazendo uma consulta em massa com dig. Dig vai cuspir todos os resultados positivos com:

dig +noall +answer

ou

dig +short

E ele se aproxima ainda mais, conforme observado em uma resposta a outra pergunta :

dig +noall +question +answer

Mas isso ainda mostra toda a saída "positiva", fazendo com que você pesquise a saída em massa de dois pontos e vírgulas em uma linha no início da linha para identificar registros que não retornam nada.

O que estou procurando é um comando (não precisa ser Dig) que retornará apenas os erros ou apenas indicará os registros sem resultados, de tal forma que somente aqueles serão exibidos , não a saída típica dos registros inseridos corretamente.

    
por Watki02 17.03.2016 / 14:55

2 respostas

1

Muitas maneiras de fazer isso ... apenas alguns scripts simples. Até mesmo uma resposta do Python na questão que você referenciou.

  • Invoque o DIG várias vezes em vez de apenas uma vez com o arquivo em massa. Isso retorna 1 linha falha, 2 ou mais linhas boas. Nome do eco com base em aprovação / reprovação.

  • Use o método de pesquisa de DNS da sua linguagem de script favorita e avalie o código de retorno. Eu gosto de powershell, e para isso você usaria [System.Net.Dns]::GetHostByAddress("fully.qualified.domain.name")

  • Invoque DIG uma vez com o arquivo em massa e regexe a saída (expressões regulares). Amostra abaixo, novamente em powershell. Se você é um cara unix, o regex também está lá. Eu usei o SED muitos anos atrás, mas provavelmente existem maneiras mais fáceis atualmente.

zz

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

retornará:

badname1.            IN    A
badname2.            IN    A

A primeira linha atribui a saída DIG a um var como uma string NOT um array. Isso é necessário porque o regex funciona em strings e não em arrays. 2a linha remove CR / LF dessa var. Parte 3A linha divide var para que cada pergunta e sua resposta apareçam na mesma linha. A parte 3B filtra esse texto para que apenas perguntas sem resposta sejam exibidas.

    
por 17.03.2016 / 22:37
0

Esse tipo de coisa será muito mais fácil em uma linguagem de script. Por exemplo, no Python, uma pesquisa defeituosa lançará uma exceção:

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

então é só uma questão de fazer todas as suas pesquisas e apenas imprimir resultados que caiam no seu try-catch.

    
por 17.03.2016 / 22:42