Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Net::Dns::Resolver


Автор: kukich 17.6.2010, 15:30
Здравствуйте.Столкнулся с задачей проверить сервера на правильность работы с помощью несуществующих доменных имен.Для этой простой довльно таки задачей надо научится обходится с модулем Net::Dns::Resolver.Кроме CPAN негде посмотреть,а у меня с английским очень туго,может кто кинет ссылку или объяснит как этот модуль работает?
P.S. Пример задачи такой:
в FreeBSD на оперцаию dig 1231243124321412451234.ru
выдает статус NXDOMAIN (т.е. такого домена нет).Это как раз то что мне нужно,но только усилиями перл.

Автор: dva300 17.6.2010, 18:23
Цитата(kukich @ 17.6.2010,  15:30)
Здравствуйте.Столкнулся с задачей проверить сервера на правильность работы с помощью несуществующих доменных имен.Для этой простой довльно таки задачей надо научится обходится с модулем Net::Dns::Resolver.Кроме CPAN негде посмотреть,а у меня с английским очень туго,может кто кинет ссылку или объяснит как этот модуль работает?
P.S. Пример задачи такой:
в FreeBSD на оперцаию dig 1231243124321412451234.ru
выдает статус NXDOMAIN (т.е. такого домена нет).Это как раз то что мне нужно,но только усилиями перл.

Доброго дня, метод конечно как мне кажется не самый лучший потому как думаю есть более продвинутые утилиты для данной проверки но раз просили по на perl можно сделать примерно следующее.
Пояснение: главное во всем этом это список NS которые вы собираетесь тестировать. В данном случае это есть @dns_servers Далее поочередно берем каждый и делаем запрос к данному NS
Здесь важно помнить что если NS работает только в режиме форвардинга и  recurse => 0 то будет выдано для не правильного домена не NXDOMAIN а  NOERROR
Проверяется запись A потому как она должна быть а записей по типу MX может и не быть.


Код

 use Net::DNS;
 use strict;
 my @dns_servers = qw(192.168.1.1 10.1.1.128 10.1.2.128);
 foreach my $server (@dns_servers)
  {
  my $res   = Net::DNS::Resolver->new(nameservers => [$server],recurse => 1,debug => 0);
  my $query = $res->search("sdfsdfksjfkljl.net");
  if ($query) 
    {
        foreach my $rr ($query->answer) 
        {
          next unless $rr->type eq "A";
          print "Answer found at NS =  [$server] : ",$rr->address, "\n";
        }
    } 
    else 
    {
        warn "query failed from NS = [$server] : ", $res->errorstring, "\n";
    }
}


ну вот, примерно как-то так.

P.S. что-то посидел подумал - какая-то плохая проверка получается smile если тестировать NS на предмет того что выше а именно простой доступности доменов это одно (но какой в этом смысл)
другое дело когда тестирование проводиться для зон которые непосредственно находятся на тестируемых NS - тогда надо сравнивать с чем-то (например правильность введенного IP и тд - как вариант при глобальной смене настроек и проверки на ошибки забывчивости) проверять правильность SOA, обратной зоны... вообщем думаю что стоит просто поискать нормальную готовую утилиту. 

Автор: pirojok 18.6.2010, 07:01
Как вариант, можно из perl через `` вызывать dig 1231243124321412451234.ru и парсить результат

Автор: kukich 24.6.2010, 14:28
Большое спасибо,очень помог!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)