在Perl中将域名转换为IPv6地址 [英] Domain name to IPv6 address in Perl

查看:91
本文介绍了在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 = ???

推荐答案

在5.14及更高版本中,您可以使用核心

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆