perl - 在Perl中将域名转换为IPv6地址

标签 perl sockets ip-address ipv6 gethostbyname

我有以下Perl代码将域名转换为IP地址。它在IPv4中正常工作。

$host = "example.com";
$ip_address = join('.', unpack('C4',(gethostbyname($host))[4]));

但是,如果它是仅IPv6的域名(例如“ipv6.google.com”),则它不起作用。

如何获得一行代码(首选CORE库)来获取IPv6 IP地址?
$host = "ipv6.google.com";
$ip_address = ???

最佳答案

在5.14及更高版本中,您可以使用核心 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 提供了相同的功能。

关于perl - 在Perl中将域名转换为IPv6地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24574821/

相关文章:

perl - 如何将 PERLBREW_ROOT 移动到另一个目录?

JavaScript:如何获取用户IP地址?

java - 关闭套接字连接

python - 为网络提交转换为 bigendian 的正确方法

c# - 异步 C# 服务器连续从多个套接字读取

c# - 使用 ip 地址组件 C#

sql-server - SQL 类命令中的 IP 地址模式

用于从网页复制文本的 Java 程序或 Perl 脚本

perl - 如何以编程方式获取有状态的 ssh shell session ?

Perl 模块使用