Просмотр полной версии : php ip ban
Нужен скрипт который бы при обращении на страницу в течении 5 секунд 3 раза, банил на 20 минут.
доступ к фаеру есть?
ОСь какая?
lsass.exe
17.03.2008, 17:27
https://forum.antichat.ru/thread48981.html
частично сорцы оттуда заюзать можешь
Нужен скрипт который бы при обращении на страницу в течении 5 секунд 3 раза, банил на 20 минут.
при обращении с одного ip-шника или с разных?
Flame of Soul
19.03.2008, 00:13
Не самая удачная реализация но всеже)
<?
$limit_time = 5; //за какое время сделано $click входов чтобы банить (в секундах)
$ban_time = 20; //на сколько банить
$click = 3; //сколько входов разрешено сделать за $limit_time
$time = strftime("%M:%S", time()); //определяем время
list ($minut,$sekund) = explode(":",$time); //переводим к нужной форме
$ip_navhode = $REMOTE_ADDR; //определяем айпи адресс
session_name("testses");
session_start();
session_register("i"); //храним количество входов
session_register("m"); //храним значение минуты
session_register("s"); //храним значение секунды
//session_register("p"); //храним вспомогательное значение
if ($m==''){$m=$minut;} //если минута не была определена то определяем
if ($s==''){$s=$sekund;} //если секунда не была определена то определяем
if ($i==0) {
$s=$sekund;
$m=$minut;
}
if ($i < $click) //если сделанно входов по проверке меньше максимума то считаем их
{
$p=$i;
$i=@$i+1;
echo "ok!";
}
else //если сделанно входов по проверке больше максимума
{
if ($s<$sekund) {$raznost = ($sekund-$s);} else {$raznost = ($s-$sekund);}
echo $raznost;
$s=$sekund;
$m=$minut;
if ($raznost<$limit_time) { echo '<META HTTP-EQUIV = "Refresh" CONTENT = "0; URL = ban.php">'; $i=0;}
else { if ($p<2){ echo "GO"; $i=0; $p=@$p+1; } else { echo "GO"; $i=2; } }
}
?>
Нужен скрипт который бы при обращении на страницу в течении 5 секунд 3 раза, банил на 20 минут.
скрипт работает на файлах
1. ChFile.txt
2. BFile.txt
вот сам код
<?php
$ChFile = "ChFile.txt";
$BFile = "BFile.txt";
class XBan
{
function ChTime($ip)
{
global $ChFile;
$handle = fopen($ChFile, "a");
fwrite($handle, $ip."#".time()."\r\n");
fclose($handle);
$handle = fopen($ChFile, "r");
$Chdet = 0;
while(!feof($handle))
{
$line = fgets($handle, 1024);
$ChA = explode("#", $line);
if($ChA[0] == "$ip")
{
if($ChA[1] > time() - 5)
{
$Chdet++;
if($Chdet == 3)
{
$this->r = true;
$this->Ban($ip, time());
break;
}
}
}
}
fclose($handle);
return $this->r;
}
function Ban($ip, $time)
{
global $BFile;
$handle = fopen($BFile, "r");
while(!feof($handle))
{
$line = fgets($handle, 1024);
if(preg_match("/$ip/", $line) !== 1)
{
if(strlen($line) > 0)
{
$lines[] = $line;
}
}
}
fclose($handle);
$handle = fopen($BFile, "w");
for($i = 0; $i < count($lines); $i++)
{
fwrite($handle, $lines[$i]."\r\n");
}
fwrite($handle, $ip."*".$time."\r\n");
fclose($handle);
}
function ChDet($ip)
{
global $BFile;
if($handle = fopen($BFile, "r"))
{
while(!feof($handle))
{
$line = fgets($handle, 1024);
$BA = explode("*", $line);
if(preg_match("/$ip/", $line) !== 0)
{
if($BA[1] > time() - 1200)
{
$this->r = true;
break;
}
}
}
}
return $this->r;
}
}
$RobotX = new XBan;
$RobotX->UserIP = $_SERVER['REMOTE_ADDR'];
$RobotX->r = false;
if($RobotX->ChDet($RobotX->UserIP) == true)
{
echo("<h1>Forbidden</h1>");
}
else
{
if($RobotX->ChTime($RobotX->UserIP) == true)
{
echo("Stop!");
}
else
{
echo("Ok!");
}
}
?>
:rolleyes:
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot