URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 4761
[ Назад ]

Исходное сообщение
"Perl и аналог host"

Отправлено XPurple , 24-Окт-05 19:15 
Какая команда в перле заменяет программу host ?
Требуется из обратной зоны по ip-адресу получить имя хоста.

Содержание

Сообщения в этом обсуждении
"Perl и аналог host"
Отправлено rWizard , 24-Окт-05 19:41 
>Какая команда в перле заменяет программу host ?
>Требуется из обратной зоны по ip-адресу получить имя хоста.
gethostbyaddr - обратное преобразование
gethostbyname - прямое
ещё есть Net::DNS

"Perl и аналог host"
Отправлено XPurple , 25-Окт-05 20:23 
Не подскажете пример команды gethostbyaddr ADDR,TYPEADDR. (так кажется пишется, пишу по памяти)
Вызвало затруднение TYPEADDR, пробовал ставить из примера, взятого в perldoc - не возвращает имя хоста.
>gethostbyaddr - обратное преобразование

>ещё есть Net::DNS
через модуль Net::DNS получилось, причем сразу.



"Perl и аналог host"
Отправлено rWizard , 25-Окт-05 22:34 
>Не подскажете пример команды gethostbyaddr ADDR,TYPEADDR.

Пример из perldoc

# cat test2.pl
use Socket;
$iaddr = inet_aton("194.87.0.50");
my $host = gethostbyaddr($iaddr, AF_INET);
print $host, "\n";

# perl test2.pl
www.ru


"Perl и аналог host"
Отправлено XPurple , 29-Окт-05 07:55 
># cat test2.pl
>use Socket;
>$iaddr = inet_aton("194.87.0.50");
>my $host = gethostbyaddr($iaddr, AF_INET);
>print $host, "\n";
>
># perl test2.pl
>www.ru
Заметил разницу при определении имени хоста с использованием use Socket
и Net::DNS::Resolver.
В первом случае идет обращение к файлу hosts, только потом к nameserver-у. В итоге, возвращается имя без доменного суффикса.
Т.е. если в файле hosts указан псевдоним хоста без суффикса вида host.domain.ru host, то результатом этой программы является вывод имени в виде host
Если я делаю с использованием DNS::Resolver, то возвращается имя хоста с суффиксом. Т.е. DNS::Resolver обращается сразу к nameserver-у, минуя установки resolv.conf и hosts. Вот такое наблюдается разночтение двух методов определения имени хостов.

use Net::DNS;
         my $res   = Net::DNS::Resolver->new;
         my $query = $res->search("192.168.1.1");

         if ($query) {
             foreach my $rr ($query->answer) {
                 next unless $rr->type eq "PTR";
                 print $rr->ptrdname, "\n";
             }
         } else {
             warn "query failed: ", $res->errorstring, "\n";
         }



"Perl и аналог host"
Отправлено chip , 30-Окт-05 09:20 
>># cat test2.pl
>>use Socket;
>>$iaddr = inet_aton("194.87.0.50");
>>my $host = gethostbyaddr($iaddr, AF_INET);
>>print $host, "\n";
>>
>># perl test2.pl
>>www.ru
>Заметил разницу при определении имени хоста с использованием use Socket
>и Net::DNS::Resolver.

http://chip.kaluga.net/archives/174-freebsd-etchosts.html