PerlでIPアドレスからホスト名をLookupするベターな方法。

gethostbyaddr()は使いにくいしどうもIPv6対応が怪しい。

IO::Socket::IPはそろそろ標準モジュールに入るらしいが、それは普及にはもうちょっとかかるってことでもある。オーバースペックな気もする。

ということで、普通にSocket.pm使ってみる。

use Socket qw(getaddrinfo getnameinfo);

sub addr_to_hostname {
    my $addr = shift;

    my ($err1, @result) = getaddrinfo($addr);
    die $err1 if $err1;

    my ($err2, $hostname) = getnameinfo($result[0]{addr});
    die $err2 if $err2;

    return $hostname;
}

print addr_to_hostname('127.0.0.1'), $/;
print addr_to_hostname('2001:4860:4860::8888'), $/; # Googleのアレ

んー、これはこれで微妙か。