Скрипт для подсчета количества запросов по ипам |
Здравствуйте, гость Вход | Регистрация
Наши новости:
|
|
Скрипт для подсчета количества запросов по ипам |
umprex |
9.12.2016, 21:45
Сообщение
|
|
Простой скрипт, но иногда нужен для мониторинга атак. Может кому надо
Код Код <?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. Интересно будет посмотреть на предложения и пожелания. Если что-то непонятно - спрашивайте
Прикрепленные файлы:
|
Поблагодарили 2 раз
|
|
Fire |
9.12.2016, 22:01
Сообщение
|
|
umprex,
При более менее мощной атаке твой пхп скрипт положит сервер, если нет лимитов) |
Поблагодарили 1 раз
|
|
umprex |
9.12.2016, 22:12
Сообщение
|
|
Fire, лимиты установлены в настройках php принудительно. Потому подумал, что нет смысла писать о том, что в такой скрипт лучше не пихать 20гб текста)
|
|
|
Fire |
9.12.2016, 22:27
Сообщение
|
|
Fire, лимиты установлены в настройках php принудительно. Потому подумал, что нет смысла писать о том, что в такой скрипт лучше не пихать 20гб текста) Когда сработают лимиты, сайт помрет) Под атакой, лучше всего избавиться от динамики. Зачастую, атака идет на главную страницу сайта, тогда имеет смысл кешировать ее nginx'om, к примеру раз в н-минут и на запросы отдавать кеш, параллельно баня наглых. |
|
|
umprex |
9.12.2016, 22:32
Сообщение
|
|
Fire, это всё умные вещи, но можно применять отдельно от атакуемого сайта или уже после атаки.
Естественно, если его запустить во время атаки, он только поможет сожрать ресурсы) |
|
|
Jelly |
9.12.2016, 22:55
Сообщение
|
|
Вопрос такой , просто я маленько не понял , эта статистика покажет какой приток игроков был сделан в день ?
|
|
|
umprex |
9.12.2016, 23:17
Сообщение
|
|
|
|
|
esterio |
14.2.2017, 1:22
Сообщение
|
Ми будемо вбивати росіян у будь-якій точці світу до повної перемоги України
|
|
|
|