How to return only empty or “problematic” DNS records for bulk queries

When doing a bulk input of records, I want to verify that I put each in its correct location by doing a bulk query with dig. Dig will spit out all positive results with:

dig +noall +answer

or

dig +short

And it gets even closer as noted in an answer to another question:

dig +noall +question +answer

But this still shows all "positive" output, making you search through the bulk output for two semicolons in a row at the start of the line to identify records that return nothing.

What I am looking for is a command (doesn't have to be Dig) that will return only the errors or only indicate the records with no results, such that only those are displayed, not the typical output of correctly entered records.

1
задан 13 April 2017 в 15:14
2 ответа

Много способов сделать это... просто простой сценарий. Даже ответ Python в вопросе, на который вы ссылались.

  • Вызовите DIG несколько раз, а не один раз с массовым файлом. Это возвращает 1 строку неудачу, 2 или более строк хорошо. Эхо-имени, основанные на pass/fail.

  • Используйте любимый метод поиска DNS в скриптовом языке и оцените код возврата. Мне нравится powershell, и для этого вы используете [System.Net.Dns]::GetHostByAddress("full.qualified.domain.name")

  • Invoke DIG один раз с оптовым файлом, и регенерируете выходные данные (регулярные выражения). Пример ниже, снова в powershell. Если вы парень с unix, то регекс тоже есть. Я использовал SED много лет назад, но, вероятно, в наши дни есть более простые способы.

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"

Вернется:

badname1.            IN    A
badname2.            IN    A

1-я строка назначает вывод DIG вариару в виде строки, а не массива. Это необходимо, потому что регекс работает со строками, а не с массивами. Вторая строка удаляет CR/LF из этого var. Часть 3A строки разделяет var так, что каждый вопрос и ответ на него появляются в одной строке. Часть 3B фильтрует этот текст так, что отображаются только вопросы без ответа

.
1
ответ дан 3 December 2019 в 23:49

На скриптовом языке это будет намного проще. Например, в Python, ошибочный поиск приведет к исключению:

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

так что тогда это просто вопрос выполнения всех ваших поисков и только распечатки результатов, которые попадают в ваш пробный лов.

.
0
ответ дан 3 December 2019 в 23:49

Теги

Похожие вопросы