# On Windows without modifying Socket compilation use Socket qw(inet_ntoa unpack_sockaddr_in IPPROTO_TCP AF_INET AF_UNSPEC); use Socket6; use Socket::GetAddrInfo qw(getaddrinfo getnameinfo); # OR just this with Socket modified - http://vinsworldcom.blogspot.com/2012/08/ipv6-in-perl-on-windows_20.html use Socket 2.005 qw(:addrinfo inet_ntoa inet_ntop unpack_sockaddr_in unpack_sockaddr_in6 IPPROTO_TCP AF_INET AF_UNSPEC); use Sys::Hostname; if (!@ARGV) { $ARGV[0] = hostname; } my %hints = ( family => AF_UNSPEC, protocol => IPPROTO_TCP ); my ($err, @getaddr) = getaddrinfo($ARGV[0], undef, \%hints); if (defined($getaddr[0])) { for my $addr (@getaddr) { my $address; if ($addr->{family} == AF_INET) { (undef, $address) = unpack_sockaddr_in($addr->{addr}) } else { (undef, $address) = unpack_sockaddr_in6($addr->{addr}) } my $host = inet_ntop($addr->{family}, $address); print "$host\n"; if (0) { # set to 1 to do reverse lookup my ($err, $host, $service) = getnameinfo($addr->{addr}, NI_NAMEREQD); printf " |_> %s\n", (defined($host)) ? $host : $err } } } else { print "$0: getaddrinfo() failed - error = $err\n" }