2014-02-05 133 views
-1

我有两个列表。一个包含网络的列表(例如10.0.0.0/8等)和第二个包含子网的列表(例如10.10.1.0/24或/ 27/28等)。我想弄清楚哪个子网适合第一个“容器”网络(使用perl)。网络列表包含其他网络?

任何想法?

+0

文件中有这两个列表?你能发布文件的前几行吗? – salparadise

回答

4

CPAN上的Net::CIDR::Compare包可能是您正在寻找的。从示例代码:

use Net::CIDR::Compare; 

my $collection = Net::CIDR::Compare->new(print_errors => 1); 

my $first_list = $collection->new_list(); 
$collection->add_range($first_list, "10.10.0.0/16", 1); 

my $second_list = $collection->new_list(); 
$collection->add_range($second_list, "10.10.200.0/24", 1); 

$collection->process_intersection(expand_cidr => 8); 
while (my $cidr_range = $collection->get_next_intersection_range()) { 
    print "$cidr_range\n"; # prints 10.10.200.0/24 
} 
2

检查NetAddr::IP

use NetAddr::IP; 

my $range1 = NetAddr::IP->new("10.0.0.0/8"); 
my $range2 = NetAddr::IP->new("10.10.1.0/24"); 
print "range1 contains range2\n" if $range1->contains($range2);