Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Скрипт для подсчета количества запросов по ипам

umprex
сообщение 9.12.2016, 21:45
Сообщение #1


Иконка группы

Стаж: 14 лет
Город: Киев

Сообщений: 2908
Благодарностей: 4780
Полезность: 2197

Простой скрипт, но иногда нужен для мониторинга атак. Может кому надо
Код
Код
<?php

    /*
        Скрипт преобразования файл-логов с наличием ип адресов в
        файл с информацией о ипах и количестве их повторений в нем.
        
        Формат вывода: "ip    count",
        где ip - адрес, а count - кол-во повторений ипа в файле
    
        Обозначение настроек:
        INPUT_FILE_NAME     — название (с форматом) файла, который содержит логи
        OUTPUT_FILE_NAME     — название файла, в который скрипт запишет результат операции
        REQUEST_COUNT         — минимальное кол-во повторений ипа в файле для его логирования в OUTPUT_FILE_NAME файл
        SEARCH_IP_TYPE         — тип поиска по ипу; 1 - x.x.x.x, 2 - x.x.x, 3 - x.x.x
        OUTPUT_PRINT         — true - выводить результат на экран, false - нет
        
        Автор: c-s.net.ua/forum/umprex
    */
    
    /*
    ** Настройки работы скрипта:
    */
    const INPUT_FILE_NAME     = 'inputfile.log';
    const OUTPUT_FILE_NAME     = 'outputfile.log';
    const REQUEST_COUNT     = 40;
    const SEARCH_IP_TYPE    = 3;
    const OUTPUT_PRINT        = false;
    /*
    */
    
    
    $pattern                = '';
    $ip_form                = '';
    $logs                    = '';
    $outputlogs             = array();
    
    if( !file_exists( INPUT_FILE_NAME ) )
    {
        die( 'log file is no found' );
    }
    
    switch( SEARCH_IP_TYPE )
    {
        case 2: $pattern     = "~[^.](\d{1,3}\.\d{1,3}\.\d{1,3})~"; $ip_form = '.0'; break;
        case 3: $pattern     = "~[^.](\d{1,3}\.\d{1,3})~"; $ip_form = '.0.0'; break;
        default: $pattern     = "~(\d{1,3}\.\d{1,3}\.\d{1,3}\d{1,3})~";  $ip_form = ''; break;
    }

    $logs = file_get_contents( INPUT_FILE_NAME );
    $logs = explode( "\n", $logs );

    foreach ( $logs as $frLogs )
    {
        if( preg_match( $pattern, $frLogs, $matches ) )
        {
            if( $matches[1] != '127.0.0.1' )
                $outputlogs[] = $matches[1];
        }
    }
    
    $outputlogs = array_count_values( $outputlogs );
    $logs = '';
    
    foreach( $outputlogs as $id => $value )
    {
        if( $value < REQUEST_COUNT )
        {
            unset( $outputlogs[$id] );
        }
    }
    
    arsort( $outputlogs );
    
    foreach( $outputlogs as $id => $value )
    {
        $id .= $ip_form;
        $logs .= $id . "\t\t" . $value . "\n";
        
        if( OUTPUT_PRINT === true )
            echo $id . ':' . $value . '<br />';
    }
    
    $fp = fopen( OUTPUT_FILE_NAME, "w+" );
    fwrite( $fp, $logs );
    fclose( $fp );
    
    if( OUTPUT_PRINT === false )
    {
        echo 'operation is done';
    }        
?>

P.S. Интересно будет посмотреть на предложения и пожелания. Если что-то непонятно - спрашивайте
Прикрепленные файлы:
Прикрепленный файл  check.php ( 2,57 килобайт ) Кол-во скачиваний: 15


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 2 раз
   Цитировать сообщение
Статус пользователя Fire
сообщение 9.12.2016, 22:01
Сообщение #2


Иконка группы

Стаж: 15 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

umprex,
При более менее мощной атаке твой пхп скрипт положит сервер, если нет лимитов)
https://github.com/pavel-odintsov/flood_shield


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
Поблагодарили 1 раз
   + Цитировать сообщение
umprex
сообщение 9.12.2016, 22:12
Сообщение #3


Иконка группы

Стаж: 14 лет
Город: Киев

Сообщений: 2908
Благодарностей: 4780
Полезность: 2197

Fire, лимиты установлены в настройках php принудительно. Потому подумал, что нет смысла писать о том, что в такой скрипт лучше не пихать 20гб текста)


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Fire
сообщение 9.12.2016, 22:27
Сообщение #4


Иконка группы

Стаж: 15 лет

Сообщений: 2201
Благодарностей: 2227
Полезность: 963

Цитата(umprex @ 9.12.2016, 23:12) *
Fire, лимиты установлены в настройках php принудительно. Потому подумал, что нет смысла писать о том, что в такой скрипт лучше не пихать 20гб текста)

Когда сработают лимиты, сайт помрет)
Под атакой, лучше всего избавиться от динамики.
Зачастую, атака идет на главную страницу сайта, тогда имеет смысл кешировать ее nginx'om, к примеру раз в н-минут и на запросы отдавать кеш, параллельно баня наглых.


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
umprex
сообщение 9.12.2016, 22:32
Сообщение #5


Иконка группы

Стаж: 14 лет
Город: Киев

Сообщений: 2908
Благодарностей: 4780
Полезность: 2197

Fire, это всё умные вещи, но можно применять отдельно от атакуемого сайта или уже после атаки.
Естественно, если его запустить во время атаки, он только поможет сожрать ресурсы)


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя Jelly
сообщение 9.12.2016, 22:55
Сообщение #6


Стаж: 7 лет 5 месяцев
Город: Красноярск

Сообщений: 202
Благодарностей: 42
Полезность: 106

Меценат Меценат

Вопрос такой , просто я маленько не понял , эта статистика покажет какой приток игроков был сделан в день ?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
umprex
сообщение 9.12.2016, 23:17
Сообщение #7


Иконка группы

Стаж: 14 лет
Город: Киев

Сообщений: 2908
Благодарностей: 4780
Полезность: 2197

RussianBear, можно применять и так) для этого ничего изменять не нужно


Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя esterio
сообщение 14.2.2017, 1:22
Сообщение #8
Стаж: 11 лет
Город: Украина

Сообщений: 266
Благодарностей: 215
Полезность: 627

fail2ban - сам ищет и сам банит


Ми будемо вбивати росіян у будь-якій точці світу до повної перемоги України
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: