При массовом вводе записей я хочу убедиться, что поместил каждую в правильное место, выполнив массовый запрос с помощью 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.