我有两个清单。一个带有网络的列表(例如10.0.0.0/8等)和带有子网的第二个列表(例如10.10.1.0/24或/ 27/28等)。我想弄清楚,哪个子网适合第一个“容器”网络(使用perl)。
有什么想法吗?
答案 0 :(得分: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
}
答案 1 :(得分:2)
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);