2012-02-28 39 views
0

如果從這樣一個input.txt的IP地址我的程序驗證:文本在Perl代碼參數與CIDR IP地址

190.116.16.99 
200.48.11.235 
200.11.48.141 
190.50.145.4 
170.40.111.178 
186.160.42.12 
200.1.176.15 
200.1.177.54 
200.1.178.253 
200.1.179.254 
200.1.184.132 

一堆CIDR IP模塊裏面,我使用該模塊Net::IP::Match幫助我出去:

IP的未裏面那些塊被歸結爲一個output.txt的。

我需要幫助編程,如何使ipblocks.txt這樣的:

161.132.0.0/16 
181.64.0.0/16 
181.65.0.0/16 
181.176.0.0/16 
186.160.0.0/14 
190.8.128.0/19 
190.11.208.0/20 
190.12.64.0/20 
190.12.80.0/20 
190.40.0.0/17 
190.40.128.0/17 
190.41.0.0/17 
190.41.128.0/17 
190.42.0.0/16 
190.43.0.0/16 
190.52.112.0/20 
190.81.0.0/18 
190.81.64.0/18 
190.81.128.0/17 
190.102.128.0/19 
190.105.240.0/20 
190.108.80.0/22 
190.108.84.0/22 
190.108.88.0/22 
190.108.92.0/22 
190.113.192.0/19 
190.114.248.0/22 
190.116.0.0/16 
190.117.0.0/16 
190.118.0.0/16 
190.124.48.0/22 
190.124.52.0/22 
190.187.0.0/17 
190.187.128.0/17 
190.222.0.0/16 
190.223.0.0/16 
190.232.0.0/16 
190.233.0.0/16 
190.234.0.0/16 
190.235.0.0/16 
190.236.0.0/16 
190.237.0.0/16 
190.238.0.0/16 
190.239.0.0/16 
192.102.84.0/24 
200.0.107.0/24 
200.0.110.0/24 
200.0.118.0/23 
200.0.136.0/24 
200.0.142.0/24 
200.0.164.0/24 
200.0.165.0/24 
200.0.166.0/23 
200.0.168.0/24 
200.0.169.0/24 
200.0.170.0/23 
200.0.172.0/23 
200.1.176.0/22 
200.1.180.0/22 
200.3.114.0/24 
200.3.241.0/24 
200.3.242.0/24 
200.4.192.0/18 
200.10.64.0/19 
200.10.130.0/23 
200.10.188.0/24 
200.10.250.0/24 
200.11.32.0/24 
200.11.34.0/23 
200.11.36.0/24 
200.11.37.0/24 
200.11.38.0/23 
200.11.48.0/20 
200.16.0.0/22 
200.16.4.0/22 
200.24.160.0/19 
200.31.96.0/20 
200.31.112.0/20 
200.37.0.0/16 
200.48.0.0/16 
200.60.0.0/17 
200.60.128.0/18 
200.60.192.0/19 
200.60.224.0/19 
200.62.128.0/18 
200.62.192.0/20 
200.62.208.0/20 
200.62.224.0/19 
200.89.0.0/20 
200.89.16.0/20 
200.106.0.0/18 
200.106.64.0/18 
200.107.128.0/18 
200.108.96.0/20 
200.110.0.0/19 
200.110.32.0/20 
200.121.0.0/17 
200.121.128.0/17 
200.123.0.0/19 
201.230.0.0/17 
201.230.128.0/17 
201.240.0.0/17 
201.240.128.0/17 
206.223.130.0/24 
209.45.0.0/17 
216.244.128.0/18 

可以在內部模塊的參數,而不必對這些區塊行和代碼行。

這是我的代碼。

unlink ("output.txt"); 
open (INPUT, 'input.txt'); 
while (<INPUT>) { 
    chomp; 
    use Net::IP::Match::Regexp qw(create_iprange_regexp match_ip); 
my $re1 = create_iprange_regexp(
'161.132.0.0/16', 
'181.64.0.0/16', 
'181.65.0.0/16', 
'181.176.0.0/16', 
'186.160.0.0/14', 
'190.8.128.0/19', 
'190.11.208.0/20', 
'190.12.64.0/20', 
'190.12.80.0/20', 
'190.40.0.0/17', 
'190.40.128.0/17', 
'190.41.0.0/17', 
'190.41.128.0/17', 
'190.42.0.0/16', 
'190.43.0.0/16', 
'190.52.112.0/20', 
'190.81.0.0/18', 
'190.81.64.0/18', 
'190.81.128.0/17', 
'190.102.128.0/19', 
'190.105.240.0/20', 
'190.108.80.0/22', 
'190.108.84.0/22', 
'190.108.88.0/22', 
'190.108.92.0/22', 
'190.113.192.0/19', 
'190.114.248.0/22', 
'190.116.0.0/16', 
'190.117.0.0/16', 
'190.118.0.0/16', 
'190.124.48.0/22', 
'190.124.52.0/22', 
'190.187.0.0/17', 
'190.187.128.0/17', 
'190.222.0.0/16', 
'190.223.0.0/16', 
'190.232.0.0/16', 
'190.233.0.0/16', 
'190.234.0.0/16', 
'190.235.0.0/16', 
'190.236.0.0/16', 
'190.237.0.0/16', 
'190.238.0.0/16', 
'190.239.0.0/16', 
'192.102.84.0/24', 
'200.0.107.0/24', 
'200.0.110.0/24', 
'200.0.118.0/23', 
'200.0.136.0/24', 
'200.0.142.0/24', 
'200.0.164.0/24', 
'200.0.165.0/24', 
'200.0.166.0/23', 
'200.0.168.0/24', 
'200.0.169.0/24', 
'200.0.170.0/23', 
'200.0.172.0/23', 
'200.1.176.0/22', 
'200.1.180.0/22', 
'200.3.114.0/24', 
'200.3.241.0/24', 
'200.3.242.0/24', 
'200.4.192.0/18', 
'200.10.64.0/19', 
'200.10.130.0/23', 
'200.10.188.0/24', 
'200.10.250.0/24', 
'200.11.32.0/24', 
'200.11.34.0/23', 
'200.11.36.0/24', 
'200.11.37.0/24', 
'200.11.38.0/23', 
'200.11.48.0/20', 
'200.16.0.0/22', 
'200.16.4.0/22', 
'200.24.160.0/19', 
'200.31.96.0/20', 
'200.31.112.0/20', 
'200.37.0.0/16', 
'200.48.0.0/16', 
'200.60.0.0/17', 
'200.60.128.0/18', 
'200.60.192.0/19', 
'200.60.224.0/19', 
'200.62.128.0/18', 
'200.62.192.0/20', 
'200.62.208.0/20', 
'200.62.224.0/19', 
'200.89.0.0/20', 
'200.89.16.0/20', 
'200.106.0.0/18', 
'200.106.64.0/18', 
'200.107.128.0/18', 
'200.108.96.0/20', 
'200.110.0.0/19', 
'200.110.32.0/20', 
'200.121.0.0/17', 
'200.121.128.0/17', 
'200.123.0.0/19', 
'201.230.0.0/17', 
'201.230.128.0/17', 
'201.240.0.0/17', 
'201.240.128.0/17', 
'206.223.130.0/24', 
'209.45.0.0/17', 
'216.244.128.0/18'); 
    if (match_ip($_, $re1) == undef) { 
open (OUTPUT, '>>output.txt'); 
print OUTPUT "$_\n"; 
close (OUTPUT); 
} 
} 
close (INPUT); 

感謝

PD:我需要幫助,使這個腳本要求TXT的路徑,使這個腳本和exe文件,能不能做到?

回答

2

如果我理解正確的話,你想一個參數添加到您的腳本給你一個IP範圍-TXT文件的文件名 - 或者最終把這個名字靜態到腳本,但負載的IP範圍從該文件。

給予的文件名始終是一個好主意。您可以使用Getopt :: Long - 它可以處理輸入文件,iprange文件和輸出文件名,但這是一個不同的問題。

use autodie; # always a good idea especially because you haven't checked return values of 'open'. 

my $ipranges_filename = $ARGV[0]; # or static filename 

# load file with ip ranges 
my @ipranges; 
open(my $ip_range, "<", $ipranges_filename); 
while(<$ip_range>) { 
    chomp; 
    push @ipranges, $_; 
} 
close($ip_range); 

my $re1 = create_iprange_regexp(@ipranges); 
# ... continue 

希望它有幫助。如果沒有,請對您的問題提供更準確的意見。

+0

此output.txt文件沒有返回的IP地址,並在網:: IP ::匹配函數的參數必須是像> 我的$ RE1 = create_iprange_regexp( '161.132.0.0/16', 「181.64 .0.0/16' ); 是的,我有擁有所有的CIDR塊,我需要用它來填補funtion的說法靜態txt文件。 – user1236307 2012-02-28 21:50:29

+2

'格格(我@ipranges = <$ip_range>)'更簡潔。 – TLP 2012-02-28 22:50:39