在Perl中将域名转换为IPv6地址 [英] Domain name to IPv6 address in Perl
本文介绍了在Perl中将域名转换为IPv6地址的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我有以下Perl代码将域名转换为IP地址.在IPv4中可以正常工作.
I have the following Perl code to translate domain name to IP address. It works fine in IPv4.
$host = "example.com";
$ip_address = join('.', unpack('C4',(gethostbyname($host))[4]));
但是,如果它是仅IPv6的域名(例如"ipv6.google.com"),则无法使用.
However, it does not work if it is an IPv6 only domain name such as "ipv6.google.com".
如何获取一行代码(首选CORE库)来获取IPv6 IP地址?
How can I get one line of code (prefer CORE library) to get IPv6 IP address?
$host = "ipv6.google.com";
$ip_address = ???
推荐答案
In 5.14 and above, you can use the core Socket
:
use 5.014;
use warnings;
use Socket ();
# protocol and family are optional and restrict the addresses returned
my ( $err, @addrs ) = Socket::getaddrinfo( $ARGV[0], 0, { 'protocol' => Socket::IPPROTO_TCP, 'family' => Socket::AF_INET6 } );
die $err if $err;
for my $addr (@addrs) {
my ( $err, $host ) = Socket::getnameinfo( $addr->{addr}, Socket::NI_NUMERICHOST );
if ($err) { warn $err; next }
say $host;
}
对于更早的Perls,可以从CPAN上的 Socket::GetAddrInfo
获得相同的功能.
For earlier perls, the same functions are available from Socket::GetAddrInfo
on CPAN.
这篇关于在Perl中将域名转换为IPv6地址的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文