Создать ответ 
Скрипт, позволяющий посчитать, сколько запросов к сайту было с каждого IP адреса
Автор Сообщение
Admin Не на форуме
Верховный
Главнокомандующий
(Administrator)
*

Сообщений: 2,431
У нас с: Aug 2011
Сообщение: #1
Скрипт, позволяющий посчитать, сколько запросов к сайту было с каждого IP адреса
Здесь мы рассмотрим простейший пример того, как посчитать количество запросов к сайту с каждого IP адреса за указанный промежуток времени.

Использование файла логов сервера считаем нецелесообразно, т.к. там много лишней информации и ее придется фильтровать и разбивать для анализа, поэтому воспользуемся MYSQLi.

Суть заключается в том, что при каждом обращении к какой-либо страничке, мы будем помещать в базу дату и IP адрес посетителя, которые потом будут суммироваться за определенные промежутки времени. Потом наиболее активные IP адреса можно будет при желании забанить Evil

Для работы нам понадобится создать в MYSQLi таблицу logs, в которой будет всего три столбца типа integer: id, date, ip.

Далее в модуль, который загружается на каждой страничке сайта помещаем простой MYSQLi запрос, который будет добавлять в таблицу информацию по IP адресам и времени их появления на сайте:
PHP код:
$res=mysqli_query($db,"INSER INTO logs (date,ip) VALUES ('".time()."',INET_ATON('".$_SERVER['REMOTE_ADDR']."'))"); 

Далее в админке добавляем запрос, который просуммирует за определенный промежуток времени все запросы с каждого IP адреса:
PHP код:
$res=mysqli_query($db,"SELECT INET_NTOA(ip) AS ip,count(id) AS col_id FROM logs WHERE date>'".(time()-86400)."' GROUP BY ip ORDER BY col_id DESC LIMIT 30");
while (
$result=mysqli_fetch_array($res)) echo $result["ip"].' - <b>'.$result["col_id"].'</b><br>'

В данном коде мы выводим 20 наиболее активных IP адреса за последние 24 часа (86400 секунд) в порядке убывания.

Стоит отметить, что запрос на добавление данных в MYSQLi базу практически не занимает времени, т.к. он очень прост и не выполняет никаких проверок и т.д. Запрос, выводящий 20 наиболее активных IP адресов за последние 24 часа, тоже не тяжелый и при 5400 тестовых строках выполнился менее чем за 0,004 секунды.

Так же можно добавить кнопку очистки таблицы логов:
PHP код:
if (isset($_POST["del_logs"])) $res=mysqli_query($db,"TRUNCATE TABLE logs");
echo 
'<input type="submit" name="del_logs" value="Очистить логи">'

При желании, можно прикрутить скрипт, который будет блокировать IP адреса, превысившие заданное количество обращений за указанный промежуток времени автоматически.
30.03.2014 20:14:03
Найти все сообщения Цитировать это сообщение
Создать ответ 


Переход:


Пользователи просматривают эту тему: 1 Гость(ей)


LiveInternet
© Copyright 2011-2024 by UsefulScript.ru