2012-09-09 2 views
3

일련의 IP 주소를 포함하는 파일을 기반으로 IP 범위를 만들려고합니다. 작성하려고하는 범위는 파일에없는 범위입니다.Perl : 주어진 목록에없는 IP 주소의 범위를 얻으십시오.

129.32.0.1 
27.45.2.2 
129.32.0.2 
65.18.2.4 

출력은

내가 현재했던 것은 입력 파일에서 IP를 추출하고 정렬 된 배열로 저장입니다 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 주소가 범위에 있는지를 판단 할 수있는 모듈을 보았지만 범위를 분할 할 수있는 것을 아직 보지 못했습니다.

답변

7

나는이 코드는 당신이 필요로하는 것을 제공 할 것으로 보인다 종합 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, 27.45.2.3-65.18.2.3, 65.18.2.5-129.32.0.0, 129.32.0.3-255.255.255.255 
+0

! 정확히 내가 무엇을 찾고 있었는지! 정말 고마워, 너는 나를 많이 구해줬다. :) – TehTechGuy

관련 문제