Помогите парсером .

Discussion in 'Болталка' started by PROjEKT, 6 Jul 2011.

  1. PROjEKT

    PROjEKT Banned

    Joined:
    22 Jun 2011
    Messages:
    4
    Likes Received:
    3
    Reputations:
    5
    Всем, Привет.
    Помогите парсером на Perl.
    Смысл такой. Я сканирую некий диапозон на открытый порт , предположим 3389. Иногда попадается такая защита , где по всей подсети провайдера идет положительный ответ , что мол порт открыт. тоесть получается список

    194.13.63.12
    94.64.13.82
    198.13.95.1
    198.13.95.2
    198.13.95.3
    198.13.95.4
    198.13.95.5
    ....
    198.13.95.253
    198.13.95.254
    198.13.95.255
    179.52.62.5
    81.74.73.162

    Тоесть некоторые провы сделали такого рода защиту.
    Люди помогите сделать такой парсер , где в случае если последний октет (байт) IPV4 повторяется, больше чем 10 раз подряд, то весь повторяющийся список удоляется из результата скана.
    Зарание спасибо .
     
  2. Ponchik

    Ponchik Хлебо-булочное изделие

    Joined:
    30 Aug 2005
    Messages:
    687
    Likes Received:
    807
    Reputations:
    311
    а ты уверен что это провы? у меня такая фигня была изза файрволла, на любом IP любой порт был кагбы открыт
    у тебя не любой IP и всёже, если есть файрволл - выруби и попробуй без него
     
  3. PROjEKT

    PROjEKT Banned

    Joined:
    22 Jun 2011
    Messages:
    4
    Likes Received:
    3
    Reputations:
    5
    Бывает такого рода защита , как она делается не вдавался в подробности. Просто прошу сделать парсер , который удалит все не нужное по выше указанному алгоритму.
     
  4. PROjEKT

    PROjEKT Banned

    Joined:
    22 Jun 2011
    Messages:
    4
    Likes Received:
    3
    Reputations:
    5
    Люди добрые , ну сделайте скрипт на Perl . На PHP у меня есть, но он не работает.

    <?php
    $file = explode("\r\n",file_get_contents("in.txt"));
    $limit = 10;

    $start = 0;

    for($i=1;$i<=count($file);$i++)
    {
    $prev = explode(".",$file[$i-1]);
    $temp = explode(".",$file[$i]);

    if($prev[2]==$temp[2])$count++;
    else
    {
    if($count>$limit)
    {
    for($a=$start;$a<=($start+$count);$a++)
    {
    unset($file[$a]);
    }
    }

    $count = 0;
    $start = $i;
    }
    }

    file_put_contents("out.txt",implode("\r\n",$file));
    ?>


    Чу, спасибо за участие. Не понимаю как с этим VBA справится, если заменить все точки, точкой-запятой, то мне кажется удалятся и нужные IP. Пробовал сканировать данные диапозоны на любые порты. Там как буд-то бы открыты все порты.
    Просто знаю , что Perl - это язык генерации отчетов и лучше его наверно никто не справится с поставленной задачей ,+ если еще файлы большие будут.
    Может кто знает , где можно попросить этот парсер сделать ? Ну где народ без особых затруднений и сложностей с этим справится ? ))
     
    #4 PROjEKT, 21 Aug 2011
    Last edited: 26 Sep 2011
  5. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Вроде робит
    PHP:
    use strict;
    my $max_in_diapazon 10;
    open(FILE,"in.txt");my @lines = <FILE>;close FILE;
    my %hashes=();
    foreach(@
    lines)
    {
        
    chomp;
        
    my @line split  /\./, $_ ;
        
    my $hash join ('.',$line[0],$line[1],$line[2]);
        
    $hashes{$hash}[++$#{ $hashes{$hash} }] = $line[3];    
    }
    foreach 
    my $mask keys %hashes 
     {
        foreach 
    my $i .. $#{ $hashes{$mask} } ) 
        
    {
            
    my $line join '.'$mask,$hashes{$mask}[$i];
        }
     }
    open(FILE,">out.txt");
    foreach 
    my $mask keys %hashes 
    {
        
    my $line;
        if($
    #{$hashes{$mask}} < $max_in_diapazon)
        
    {
            foreach 
    my $i (0..$#{$hashes{$mask}}) 
            
    {
                
    $line join '.'$mask,$hashes{$mask}[$i];
                print 
    FILE $line,"\n";
            }
        } else {
            
    $line join '.'$mask,'###';
            print 
    FILE $line,"\n";
        }    
    }
    close FILE;
     
  6. PROjEKT

    PROjEKT Banned

    Joined:
    22 Jun 2011
    Messages:
    4
    Likes Received:
    3
    Reputations:
    5
    Запускаю на сервере UNIX , Apache + PHP.

    chmod +x pars.php сделал
    chmod 777 in.txt out.txt сделалю

    Запускаю через браузер , белый экран и ничего не происходит.

    Тогда пробую запустить с командно строки
    lynx pars.php

    Он выдает
    ;close FILE; my %hashes=(); foreach (@lines) { chomp; my @line = split /./, $_ ; my $hash = join
    ('.',$line[0],$line[1],$line[2]); $hashes{$hash}[++$#{ $hashes{$hash} }] = $line[3]; } foreach my $mask (
    keys %hashes ) { foreach my $i ( 0 .. $#{ $hashes{$mask} } ) { my $line = join '.',
    $mask,$hashes{$mask}[$i]; } } open(FILE,">out.txt"); foreach my $mask ( keys %hashes ) { my $line;
    if($#{$hashes{$mask}} < $max_in_diapazon) { foreach my $i (0..$#{$hashes{$mask}}) { $line = join '.',
    $mask,$hashes{$mask}[$i]; print FILE $line,"\n"; } } else { $line = join '.', $mask,'###'; print FILE
    $line,"\n"; } } close FILE; ?>

    Не могу понять , в чем может быть дело ?

    P.S.
    Вот предположим список, который надо обработать.
     
    #6 PROjEKT, 27 Sep 2011
    Last edited: 27 Sep 2011
  7. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Ну это perl, а не php, поэтому запускай по-другому :)
     
  8. PROjEKT

    PROjEKT Banned

    Joined:
    22 Jun 2011
    Messages:
    4
    Likes Received:
    3
    Reputations:
    5
    Ааааааа , спасибо тебе наиогромнейшее . :D
    Ступил, тупо скопипастил, даже в код не вдумывался.
    Вот сейчас смотрю и понимаю , что да ... Переменные с операторами то перловские )))
    Спс еще раз :p ;)

    P.S.
    Сделал перловый скрипт .
    Он мне на выходе в файл OUT.txt Выдает такой результат:
    ...###

    Блин уже голову сломал , не пойму почему. Может в какой нить переменной пробел не верно стоит ?
     
    #8 PROjEKT, 28 Sep 2011
    Last edited: 28 Sep 2011
  9. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Ага, в строке
    my @line = split /./, $_ ;
    съелся символ экранирования. Перед точкой надо поставить символ '\'(обраный слеш).
     
  10. PROjEKT

    PROjEKT Banned

    Joined:
    22 Jun 2011
    Messages:
    4
    Likes Received:
    3
    Reputations:
    5
    64.8.99.###
    24.142.76.###
    В файле , который на выходе, моментами почему-то такие темы попадаются .
     
  11. bad_boy

    bad_boy Elder - Старейшина

    Joined:
    30 Dec 2004
    Messages:
    187
    Likes Received:
    33
    Reputations:
    3
    Если по маске встречаются
    X.Y.Z.1
    X.Y.Z.2
    X.Y.Z.3
    X.Y.Z.10
    X.Y.Z.50
    X.Y.Z.240
    и так более 10 раз, то они заменяются на
    X.Y.Z.###

    В начале кода есть переменная, которая это регулирует:
    Code:
    my $max_in_diapazon = 10;
     
  12. PROjEKT

    PROjEKT Banned

    Joined:
    22 Jun 2011
    Messages:
    4
    Likes Received:
    3
    Reputations:
    5
    Угумс , спасибки еще раз огромное. :p
    Кинь ру кашель вебмани.