首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >域名到Perl中的IPv6地址

域名到Perl中的IPv6地址
EN

Stack Overflow用户
提问于 2014-07-04 12:53:20
回答 2查看 2.1K关注 0票数 1

下面的Perl代码可以将域名转换为IP地址。它在IPv4中运行得很好。

代码语言:javascript
复制
$host = "example.com";
$ip_address = join('.', unpack('C4',(gethostbyname($host))[4]));

但是,如果它只是一个IPv6域名,比如"ipv6.google.com“,它就不能工作。

如何获得一行代码(更喜欢核心库)来获取IPv6 IP地址?

代码语言:javascript
复制
$host = "ipv6.google.com";
$ip_address = ???
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-07-04 13:57:18

在5.14及以上版本中,您可以使用核心Socket

代码语言:javascript
复制
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中获得。

票数 3
EN

Stack Overflow用户

发布于 2014-07-04 13:19:10

Net::DNS还可以帮助您:

代码语言:javascript
复制
#!/usr/bin/perl -w                                                                                                  
use strict;
use warnings;

use Net::DNS;

my $res   = Net::DNS::Resolver->new;
my $query = $res->query("ipv6.google.com", "AAAA")
    or die "query failed: ", $res->errorstring;

foreach my $rr (grep { $_->type eq 'AAAA' } $query->answer) {
    print $rr->address, "\n";
}

产出:

代码语言:javascript
复制
2607:f8b0:4010:801:0:0:0:1005
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24574821

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档