我试图在给定前缀长度的情况下从给定的IPv6地址获取IPv6前缀。
我已经尝试过几个模块(比如Net :: IP,Net :: IPv6Addr和Net :: IPv6Address),但似乎没有一个模块能够完成。
实际上只有Net :: IPv6Address提供了这样的方法,但结果不是IPv6格式。
例如: IPv6: FE80:0202:B3FF:FE1E :: / 56 应该给出前缀 FE80:0202:B3FF:FE00 :: 但是当我运行这段代码时:< / p>
use Net::IPv6Address;
my $IPv6Address = new Net::IPv6Address("FE80:0202:B3FF:FE1E::", 56);
my $prefix = $IPv6Address->prefix();
print $prefix;
我得到&#39; fe800202b3fffe&#39; (不是正确的IPv6格式)......
我在Java中使用 com.googlecode.ipv6.IPv6Address 和 com.googlecode.ipv6.IPv6NetworkMask 库做了同样的事情,并且它运行良好。
关于如何做到这一点的任何想法?
提前感谢大家!
答案 0 :(得分:0)
有许多模块可以做到这一点。我建议Net::Works或NetAddr::IP。使用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::
。