我正在尝试根据包含一系列IP地址的文件创建IP地址范围.我正在尝试创建的范围是那些不在文件中的范围.例如,如果我有以下IP地址:
129.32.0.1 27.45.2.2 129.32.0.2 65.18.2.4
输出应为0.0.0.0-27.45.2.1,27.45.2.3-65.18.2.3,65.18.2.5-129.32.0.0,129.32.0.3-255.255.255.255
我目前所做的是从输入文件中提取IP并将它们存储到已排序的数组中(升序).
#!/usr/bin/perl -w use strict; use Sort::Key::IPv4 qw(ipv4sort); my $list = 'C:\Desktop\IPs.txt'; my $ipRange; my @ips; my $i = 0; # Get IP Addresses into array open(FILE,$list); while (<FILE>) { chomp($_); $ips[$i] = ($_); ++$i; } # Sort IP Addresses my @sorted = ipv4sort @ips; # Create IP Ranges
我希望CPAN上有一些可以帮助我的东西.我已经看到模块可以确定IP地址是否在一个范围内,但还没有看到任何可以分割范围的模块.
解决方法
我建议全面的
Net::CIDR::Set
模块
这段代码似乎提供了您所需要的
use strict; use warnings; use Net::CIDR::Set; open my $fh,'<','C:\Desktop\IPs.txt' or die $!; my $range = Net::CIDR::Set->new; while (<$fh>) { chomp; $range->add($_); } $range->invert; print $range->as_string(2);
产量
0.0.0.0-27.45.2.1,129.32.0.3-255.255.255.255