Обратный поиск DNS в Perl - PullRequest
       45

Обратный поиск DNS в Perl

12 голосов
/ 17 сентября 2008

Как выполнить обратный поиск в DNS, то есть как разрешить IP-адрес для его имени хоста DNS в Perl?

Ответы [ 8 ]

20 голосов
/ 17 сентября 2008

Если вам нужна более подробная информация о DNS, используйте модуль Net :: DNS , вот пример:

use Net::DNS;
my $res = Net::DNS::Resolver->new;

# create the reverse lookup DNS name (note that the octets in the IP address need to be reversed).
my $IP = "209.85.173.103";
my $target_IP = join('.', reverse split(/\./, $IP)).".in-addr.arpa";

my $query = $res->query("$target_IP", "PTR");

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

Оригинальный источник EliteHackers.info , более подробная информация также там.

20 голосов
/ 17 сентября 2008

gethostbyaddr и подобные звонки. Смотри http://perldoc.perl.org/functions/gethostbyaddr.html

14 голосов
/ 17 сентября 2008
use Socket;
$iaddr = inet_aton("127.0.0.1"); # or whatever address
$name  = gethostbyaddr($iaddr, AF_INET);
4 голосов
/ 10 октября 2012
perl -MSocket -E 'say scalar gethostbyaddr(inet_aton("69.89.27.250"), AF_INET)'

Возвращает: Не удается найти терминатор строки "'" где-либо до EOF в строке -e 1.

perl -MSocket -E "say scalar gethostbyaddr(inet_aton(\"69.89.27.250\"), AF_INET)"

Возвращает: box250.bluehost.com

Мне нужно изменить строку, чтобы использовать двойные кавычки, а затем экранировать кавычки вокруг IP-адреса

2 голосов
/ 03 сентября 2009

один вкладыш:

perl -MSocket -E 'say scalar gethostbyaddr(inet_aton("79.81.152.79"), AF_INET)'
1 голос
/ 17 сентября 2008

Если gethostbyaddr не соответствует вашим потребностям, Net :: DNS более гибок.

1 голос
/ 17 сентября 2008

Возможно, существует более простой способ, но для IPv4, если вы можете выполнять обычный поиск DNS, вы всегда можете создать обратный запрос самостоятельно. Для получения IPv4-адреса A.B.C.D найдите все записи PTR на D.C.B.A.in-addr.arpa. Для IPv6 вы берете 128 гексов, переворачиваете их и добавляете ipv6.arpa. и сделать то же самое.

0 голосов
/ 19 сентября 2008

Это может быть полезно ...

$ip = "XXX.XXX.XXX.XXX" # IPV4 address.
my @numbers = split (/\./, $ip);
if (scalar(@numbers) != 4)
{
    print "$ip is not a valid IP address.\n";
    next;
}
my $ip_addr = pack("C4", @numbers);
# First element of the array returned by gethostbyaddr is host name.
my ($name) = (gethostbyaddr($ip_addr, 2))[0];
...