Perl:获取不在给定列表中的IP地址范围
发布时间:2020-12-15 23:20:16 所属栏目:大数据 来源:网络整理
导读:我正在尝试根据包含一系列IP地址的文件创建IP地址范围.我正在尝试创建的范围是那些不在文件中的范围.例如,如果我有以下IP地址: 129.32.0.127.45.2.2129.32.0.265.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-25
我正在尝试根据包含一系列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:DesktopIPs.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:DesktopIPs.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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |