12

逆引き DNS ルックアップを実行するにはどうすればよいですか。つまり、Perl で IP アドレスを DNS ホスト名に解決するにはどうすればよいですか?

4

8 に答える 8

21

より詳細な 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、詳細もそこにあります。

于 2008-09-17T17:32:13.853 に答える
20

gethostbyaddr および同様の呼び出し。見るhttp://perldoc.perl.org/functions/gethostbyaddr.html

于 2008-09-17T17:15:58.370 に答える
14
use Socket;
$iaddr = inet_aton("127.0.0.1"); # or whatever address
$name  = gethostbyaddr($iaddr, AF_INET);
于 2008-09-17T17:22:49.897 に答える
4
perl -MSocket -E 'say scalar gethostbyaddr(inet_aton("69.89.27.250"), AF_INET)'

戻り値: -e 行 1 の EOF より前のどこにも文字列ターミネータ "'" が見つかりません。

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

戻り値: box250.bluehost.com

二重引用符を使用するように行を変更してから、IP アドレスを囲む引用符をエスケープする必要があります

于 2012-10-09T23:51:39.830 に答える
2

一発ギャグ:

perl -MSocket -E 'say scalar gethostbyaddr(inet_aton("79.81.152.79"), AF_INET)'
于 2009-09-03T13:29:46.180 に答える
1

もっと簡単な方法があるかもしれませんが、IPv4 の場合、通常の DNS ルックアップが実行できる場合は、いつでも自分で逆クエリを作成できます。IPv4 アドレス ABCD については、DCBAin-addr.arpa で PTR レコードを検索します。IPv6 の場合、128 の 16 進数のニブルを取り、それらを裏返して ipv6.arpa を追加します。そして同じことをします。

于 2008-09-17T17:17:12.470 に答える
1

gethostbyaddr がニーズに合わない場合は、Net::DNSの方が柔軟です。

于 2008-09-17T17:22:03.377 に答える
0

これは便利かも…

$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];
于 2008-09-18T22:25:35.323 に答える