2014-02-05 1 views
-1

두 개의 목록이 있습니다. 네트워크가있는 목록 (예 : 10.0.0.0/8 등)과 서브넷이있는 두 번째 목록 (예 : 10.10.1.0/24 또는/27/28 등). 첫 번째 '컨테이너'네트워크에 맞는 서브넷을 알아 내고 싶습니다 (perl 사용).네트워크 목록에 다른 네트워크가 있습니까?

아이디어가 있으십니까?

+0

는 파일이 두 목록이 있습니까? 파일의 처음 몇 줄을 게시 할 수 있습니까? – salparadise

답변

4

Net::CIDR::Compare 패키지가 CPAN에 있습니다. 예제 코드에서 :

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); 
관련 문제