Назад | Перейти на главную страницу

Как вернуть только пустые или «проблемные» записи DNS для массовых запросов

При массовом вводе записей я хочу убедиться, что поместил каждую в правильное место, выполнив массовый запрос с помощью dig. Dig выдаст все положительные результаты:

dig +noall +answer

или

dig +short

И это становится еще ближе, как отмечено в ответе на Другой вопрос:

dig +noall +question +answer

Но это по-прежнему показывает весь «положительный» вывод, заставляя вас искать в массовом выводе две точки с запятой подряд в начале строки, чтобы идентифицировать записи, которые ничего не возвращают.

Я ищу команду (не обязательно Dig), которая вернет только ошибки или укажет только записи без результатов, например отображаются только те, а не типичный вывод правильно введенных записей.

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

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

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

  • Вызов 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 переменной как строку НЕ массив. Это необходимо, потому что регулярное выражение работает со строками, а не с массивами. 2-я строка удаляет CR / LF из этой переменной. Часть 3 Строка разделяет var, поэтому каждый вопрос и ответ на него отображаются в одной строке. Часть 3B фильтрует этот текст, чтобы отображались только вопросы, на которые нет ответа.

Такого рода вещи будут намного проще на языке сценариев. Например, в 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

так что тогда просто нужно выполнять все ваши поиски и распечатывать только те результаты, которые попадают в ваш try-catch.