Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Net::DNS vs. dig

0 views
Skip to first unread message

Gennadij Pastuhov

unread,
Mar 11, 2020, 6:25:01 AM3/11/20
to
Рад всех приветствовать! А особенно - All!

Требуется делать запросы к различным DNS серверам и сравнивать полученные
ответы. Насколько хорошо работает Net::DNS? Или лучше парсить вывод dig? Или
есть ещё инструменты?

... Jonny wanna live

Eugene Grosbein

unread,
Mar 12, 2020, 12:25:01 PM3/12/20
to
11 марта 2020, среда, в 13:17 NOVT, Gennadij Pastuhov написал(а):

GP> Требуется делать запросы к различным DNS серверам и сравнивать полученные
GP> ответы. Hасколько хорошо работает Net::DNS?

Хорошо.

GP> Или лучше парсить вывод dig?

Этого нужно избегать всеми средствами. Во-первых, это медленно,
а во-вторых, вывод разный для разных версий dig.
А ещё dig может вообще не быть в системе, это чать пакета bind,
который нынче часто заменяют на другие (drill etc.)

GP> есть ещё инструменты?

Полно инструментов и других тоже. Hапример, модули AnyEvent и
AnyEvent::DNS полезны, когда нужно выполнять огромное количество
запросов и тогда очень желательно делать это асинхронно,
то есть запулить в сеть сразу пачку запросов - штук 100 или 200 -
не ожидая ответа на каждый, а потом сидеть и ждать,
когда начнут приходить ответы и по приходе каждого ответа
посылать в сеть новый запрос, либо посылать новый запрос
по истечение таймаута на один из ранее отправленных старых.

Таким образом при помощи Async::DNS мой скрипт ресолвит
порядка 12900 имён со скоростью около 1230 запросов в секунду
и тратит на всё это меньше двух минут суммарно, при том что
часть запросов обламывается по таймауту, но это не страшно,
так как они не тормозят других. И так как DNS-запросы это пакеты UDP,
для которых обычное дело теряться в сети, то можно и нужно
делать повторы для таких запросов. Большая часть запросов
укладывается в двухсекундный таймаут, некоторые серверы-тормоза
отвечают медленней и для них делается переповтор с таймаутом
в 6 секунд, а потом третий повтор с таймаутом в 12 секунд -
бывают и настолько тормозные, хотя их и очень мало.

Для достижения такой скорости делаю 200 изначальных запросов
и поддерживаю такое количество запросов "в полёте"
по мере прихода результатов. Всё это делается без распараллеливания
по ядрам CPU и загрузка одного ядра CPU в моём случае
получается в пике 90%, в среднем 80%. Тут важно не перегрузить
CPU, чтобы он успевал обрабатывать пришедшие ответы,
а иначе они могут переполнить входной буфер и потеряться.

Eugene

Gennadij Pastuhov

unread,
Mar 12, 2020, 12:40:01 PM3/12/20
to
Рад всех приветствовать! А особенно - Eugene!

Четверг марта 12 20 23:09 Eugene Grosbein писал к Gennadij Pastuhov:

GP>> Требуется делать запросы к различным DNS серверам и сравнивать
GP>> полученные
GP>> ответы. Hасколько хорошо работает Net::DNS?

EG> Хорошо.

[ сожрали демоны ]

Огромное спасибо! А как кошерно сравнить индентичность записей?
Например, есть запись: '20 mx03.nicmail.ru.'
И с другого сервера: '20 mx03.nicmail.ru.'

Cплитить по \s и сравнивать массивы? Или есть некая общая каноничная форма?
В Net::DNS::RR не нашёл функции сравнения.

... Jonny wanna live

Eugene Grosbein

unread,
Mar 12, 2020, 4:30:01 PM3/12/20
to
12 марта 2020, четверг, в 19:30 NOVT, Gennadij Pastuhov написал(а):

GP> Огромное спасибо! А как кошерно сравнить индентичность записей?
GP> Hапример, есть запись: '20 mx03.nicmail.ru.'
GP> И с другого сервера: '20 mx03.nicmail.ru.'
GP> Cплитить по \s и сравнивать массивы? Или есть некая общая каноничная
GP> форма?
GP> В Net::DNS::RR не нашёл функции сравнения.

А с чего ты взял, что Net::DNS возвращает результат в таком текстовом виде?
Ты вообще читал perldoc Net::DNS? Там даже примеры есть.

Eugene

Gennadij Pastuhov

unread,
Mar 13, 2020, 5:55:01 AM3/13/20
to
Рад всех приветствовать! А особенно - Eugene!

Пятница марта 13 20 03:22 Eugene Grosbein писал к Gennadij Pastuhov:

GP>> Огромное спасибо! А как кошерно сравнить индентичность записей?
GP>> Hапример, есть запись: '20 mx03.nicmail.ru.'
GP>> И с другого сервера: '20 mx03.nicmail.ru.'
GP>> Cплитить по \s и сравнивать массивы? Или есть некая общая
GP>> каноничная форма?
GP>> В Net::DNS::RR не нашёл функции сравнения.

EG> А с чего ты взял, что Net::DNS возвращает результат в таком текстовом
EG> виде?

Я его через $rr->rdstring получаю.

EG> Ты вообще читал perldoc Net::DNS?

Да.

EG> Там даже примеры есть.

Про сравнение ничего не нашёл... :(

... Jonny wanna live

Eugene Grosbein

unread,
Mar 13, 2020, 7:10:01 AM3/13/20
to
13 марта 2020, пятница, в 12:35 NOVT, Gennadij Pastuhov написал(а):

EG>> А с чего ты взял, что Net::DNS возвращает результат в таком текстовом
EG>> виде?
GP> Я его через $rr->rdstring получаю.
EG>> Ты вообще читал perldoc Net::DNS?
GP> Да.
EG>> Там даже примеры есть.
GP> Про сравнение ничего не нашёл... :(

Используй $rr->exchange и $rr->preference.
Получше читай документацию.

Eugene
--
Кара за одно съеденное яблоко, все-таки, была несоизмеримо велика,
приступ диареи послужил бы достаточным уроком.

Gennadij Pastuhov

unread,
Mar 13, 2020, 8:30:01 AM3/13/20
to
Рад всех приветствовать! А особенно - Eugene!

Пятница марта 13 20 18:00 Eugene Grosbein писал к Gennadij Pastuhov:

EG>>> А с чего ты взял, что Net::DNS возвращает результат в таком
EG>>> текстовом
EG>>> виде?
GP>> Я его через $rr->rdstring получаю.
EG>>> Ты вообще читал perldoc Net::DNS?
GP>> Да.
EG>>> Там даже примеры есть.
GP>> Про сравнение ничего не нашёл... :(

EG> Используй $rr->exchange и $rr->preference.
EG> Получше читай документацию.

Там про это написано, что они есть только у мх, и про сравнение ни слова. Решил
делать сравнением массивов.

... Jonny wanna live

Eugene Grosbein

unread,
Mar 13, 2020, 11:10:01 AM3/13/20
to
13 марта 2020, пятница, в 15:04 NOVT, Gennadij Pastuhov написал(а):

GP> Там про это написано, что они есть только у мх, и про сравнение ни слова.
GP> Решил
GP> делать сравнением массивов.

Дело модуля - вернуть тебе данные. Как ты их потом будешь
использовать - сравнивать или склеивать - уже логика твоего скрипта.

А что это за задача такая, сравнивать ответы от разных серверов?
Они вообще не обязаны быть идентичными, даже порядок элементов
в ответе может отличаться, так что сортируй перед сравнением.

Eugene

Gennadij Pastuhov

unread,
Mar 13, 2020, 12:25:01 PM3/13/20
to
Рад всех приветствовать! А особенно - Eugene!

Пятница марта 13 20 22:04 Eugene Grosbein писал к Gennadij Pastuhov:

GP>> Там про это написано, что они есть только у мх, и про сравнение
GP>> ни слова. Решил делать сравнением массивов.

EG> Дело модуля - вернуть тебе данные. Как ты их потом будешь
EG> использовать - сравнивать или склеивать - уже логика твоего скрипта.

EG> А что это за задача такая, сравнивать ответы от разных серверов?
EG> Они вообще не обязаны быть идентичными, даже порядок элементов
EG> в ответе может отличаться, так что сортируй перед сравнением.

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

... Jonny wanna live

Dmitry Ivanov

unread,
Mar 14, 2020, 12:35:01 AM3/14/20
to
Здравствуйте, Gennadij.

Вы писали 13 марта 2020 г., 22:18:20:

> Есть несколько групп серверов, которые должны быть слейвами нашего
> мастера. Хочется иметь возможность проверить, насколько точно и быстро они
> утягивают данные.

Хм. Дергай чем угодно serial number из SOA и сравнивай.

--
С уважением,
Dmitry

Gennadij Pastuhov

unread,
Mar 14, 2020, 6:40:01 AM3/14/20
to
Рад всех приветствовать! А особенно - Dmitry!

Суббота марта 14 20 07:20 Dmitry Ivanov писал к Gennadij Pastuhov:

>> Есть несколько групп серверов, которые должны быть слейвами нашего
>> мастера. Хочется иметь возможность проверить, насколько точно и
>> быстро они утягивают данные.

DI> Хм. Дергай чем угодно serial number из SOA и сравнивай.

Ладно, я уже сделал через сравнение массивов. Начальство довольно :)

... Jonny wanna live

Eugene Grosbein

unread,
Mar 14, 2020, 7:25:01 AM3/14/20
to
13 марта 2020, пятница, в 19:18 NOVT, Gennadij Pastuhov написал(а):

EG>> А что это за задача такая, сравнивать ответы от разных серверов?
EG>> Они вообще не обязаны быть идентичными, даже порядок элементов
EG>> в ответе может отличаться, так что сортируй перед сравнением.
GP> Есть несколько групп серверов, которые должны быть слейвами нашего
GP> мастера.
GP> Хочется иметь возможность проверить, насколько точно и быстро они
GP> утягивают
GP> данные.

Со slave-серверами всё обстоит гораздо проще: у slave-сервера
зона либо точно синхронизирована с мастером, либо нет.
Точно синхронизирована она тогда и только тогда, когда у мастера
и вторичника совпадает значение serial в записи SOA.

Поэтому, чтобы не перегружать вторичники лишними запросами,
а так же не загружать проверяющий сервер ненужной работой,
а ещё для упрощения скрипта - чем сложнее скрипт, тем легче
в нём упустить баг - запрашивай только одну запись SOA и
сравнивай только serial. Даже если уже сделал по-своему,
переделай, иначе однажды сам себя станешь корить, что поленился.

Eugene

Gennadij Pastuhov

unread,
Mar 14, 2020, 12:10:01 PM3/14/20
to
Рад всех приветствовать! А особенно - Eugene!

Суббота марта 14 20 18:14 Eugene Grosbein писал к Gennadij Pastuhov:

EG>>> А что это за задача такая, сравнивать ответы от разных серверов?
EG>>> Они вообще не обязаны быть идентичными, даже порядок элементов
EG>>> в ответе может отличаться, так что сортируй перед сравнением.
GP>> Есть несколько групп серверов, которые должны быть слейвами
GP>> нашего мастера.
GP>> Хочется иметь возможность проверить, насколько точно и быстро они
GP>> утягивают
GP>> данные.

EG> Со slave-серверами всё обстоит гораздо проще: у slave-сервера
EG> зона либо точно синхронизирована с мастером, либо нет.
EG> Точно синхронизирована она тогда и только тогда, когда у мастера
EG> и вторичника совпадает значение serial в записи SOA.

EG> Поэтому, чтобы не перегружать вторичники лишними запросами,
EG> а так же не загружать проверяющий сервер ненужной работой,
EG> а ещё для упрощения скрипта - чем сложнее скрипт, тем легче
EG> в нём упустить баг - запрашивай только одну запись SOA и
EG> сравнивай только serial. Даже если уже сделал по-своему,
EG> переделай, иначе однажды сам себя станешь корить, что поленился.

Спасибо. Это разумно. Уже лет 10 с днс не работал, забыл. Озвучу всё
руководству.

... Jonny wanna live

Viktor V. Kudlak

unread,
Apr 2, 2020, 2:25:01 PM4/2/20
to
Hello Gennadij.

11 Mar 20 13:17, you wrote to all:

GP> Требуется делать запросы к различным DNS серверам и сравнивать
GP> полученные ответы. Насколько хорошо работает Net::DNS? Или лучше
GP> парсить вывод dig? Или есть ещё инструменты?

Клёво ты меряешь system (popen) vs syscall...

Хотя, уверяю, для твоих задач вполне хватит и system... линукс исправит все
твои косяки кэширванием =)))



Viktor

0 new messages