使用perl获取IPv6前缀

时间:2014-04-16 16:27:45

标签: perl ipv6 prefix

我试图在给定前缀长度的情况下从给定的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 库做了同样的事情,并且它运行良好。

关于如何做到这一点的任何想法?

提前感谢大家!

1 个答案:

答案 0 :(得分:0)

有许多模块可以做到这一点。我建议Net::WorksNetAddr::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::