使用perl获取IPv6前缀

使用perl获取IPv6前缀,perl,ipv6,prefix,Perl,Ipv6,Prefix,我正在尝试从给定前缀长度的给定IPv6地址获取IPv6前缀 我已经尝试了几个模块(如Net::IP、Net::IPv6Addr和Net::IPv6Address),但似乎没有一个模块能够做到这一点 实际上,只有Net::IPv6Address提供了这样的方法,但结果不是IPv6格式 例如: IPv6:FE80:0202:B3FF:FE1E::/56应该给出一个前缀FE80:0202:B3FF:FE00::但是当我运行此代码时: use Net::IPv6Address; my $IPv6Addr

我正在尝试从给定前缀长度的给定IPv6地址获取IPv6前缀

我已经尝试了几个模块(如Net::IP、Net::IPv6Addr和Net::IPv6Address),但似乎没有一个模块能够做到这一点

实际上,只有Net::IPv6Address提供了这样的方法,但结果不是IPv6格式

例如: IPv6:FE80:0202:B3FF:FE1E::/56应该给出一个前缀FE80:0202:B3FF:FE00::但是当我运行此代码时:

use Net::IPv6Address;
my $IPv6Address = new Net::IPv6Address("FE80:0202:B3FF:FE1E::", 56);
my $prefix = $IPv6Address->prefix();
print $prefix;
我得到“fe800202b3fffe”(不是正确的IPv6格式)

我在Java中使用com.googlecode.ipv6.ipv6地址和com.googlecode.ipv6.ipv6网络掩码库也做了同样的工作,它工作得非常好

有什么办法吗


提前感谢大家

有许多模块可以做到这一点。我建议你还是去。使用Net::Works:

use v5.16;

use Net::Works::Network;

my $network = Net::Works::Network->new_from_string( 
                 string => 'FE80:0202:B3FF:FE1E::/56' );
say $network->first;

这将输出
fe80:202:b3ff:fe00::

,该返回似乎完全可用。你想做什么?你只是想每4个分号加上0使其成为4个字节的集合吗?