使用perl获取IPv6前缀



我正在尝试从给定前缀长度的给定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.IPv6Address.com.googlecode.ipv6-IPv6NetworkMask库做了同样的操作,它运行得很好。

有什么想法吗?

提前感谢大家!

有很多模块可以做到这一点。我建议使用Net::Works或NetAddr::IP。使用网络::作品:

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::

最新更新