Текст в аргументе в коде Perl с IP-адресами CIDR - PullRequest
0 голосов
/ 29 февраля 2012

Моя программа проверяет, находятся ли ip-адреса из input.txt следующим образом:

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

внутри группы IP-блоков CIDR, я использую модуль 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, и сделать этот скрипт и исполняемый файл, это можно сделать?

1 Ответ

2 голосов
/ 29 февраля 2012

Если я правильно понимаю, вы хотите добавить параметр в ваш скрипт, давая вам имя файла ip-range-txt - или, в конце концов, статически вставить имя в скрипт, но загрузить ip-range из этого файла.

Предоставление имени файла всегда хорошая идея. Для этого вы можете использовать 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

Надеюсь, это поможет. Если нет, дайте более точную информацию о вашей проблеме.

...