php ip ban

Discussion in 'PHP' started by noisia, 17 Mar 2008.

  1. noisia

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

    Joined:
    13 Mar 2007
    Messages:
    20
    Likes Received:
    10
    Reputations:
    0
    Нужен скрипт который бы при обращении на страницу в течении 5 секунд 3 раза, банил на 20 минут.
     
  2. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    доступ к фаеру есть?
    ОСь какая?
     
  3. lsass.exe

    lsass.exe Elder - Старейшина

    Joined:
    5 Aug 2007
    Messages:
    156
    Likes Received:
    161
    Reputations:
    24
    https://forum.antichat.ru/thread48981.html
    частично сорцы оттуда заюзать можешь
     
  4. x88x

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

    Joined:
    27 Nov 2007
    Messages:
    208
    Likes Received:
    119
    Reputations:
    16
    при обращении с одного ip-шника или с разных?
     
  5. noisia

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

    Joined:
    13 Mar 2007
    Messages:
    20
    Likes Received:
    10
    Reputations:
    0
    одного
     
  6. Flame of Soul

    Flame of Soul Elder - Старейшина

    Joined:
    25 May 2007
    Messages:
    185
    Likes Received:
    146
    Reputations:
    45
    Не самая удачная реализация но всеже)

    PHP:
    <?
    $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; } }
    }
    ?>
     
    #6 Flame of Soul, 18 Mar 2008
    Last edited: 18 Mar 2008
  7. ~X3RiX~

    ~X3RiX~ Banned

    Joined:
    14 Mar 2008
    Messages:
    22
    Likes Received:
    7
    Reputations:
    -5
    скрипт работает на файлах

    1. ChFile.txt
    2. BFile.txt

    вот сам код

    PHP:
    <?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($handle1024);
                
    $ChA explode("#"$line);
                if(
    $ChA[0] == "$ip")
                {
                    if(
    $ChA[1] > time() - 5)
                    {
                        
    $Chdet++;
                        
                        if(
    $Chdet == 3)
                        {
                            
    $this->true;
                            
    $this->Ban($iptime());
                            break;
                        }
                    }
                }
            }
            
            
    fclose($handle);
            return 
    $this->r;
        }
        
        function 
    Ban($ip$time)
        {
            global 
    $BFile;
         
            
    $handle fopen($BFile"r");
            
            while(!
    feof($handle))
            {
                
    $line fgets($handle1024);
                
                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($handle1024);
                    
                    
    $BA explode("*"$line);
                    
                    if(
    preg_match("/$ip/"$line) !== 0)
                    {
                        if(
    $BA[1] > time() - 1200)
                        {
                            
    $this->true;
                            break;
                        }
                    }
                }
            }
            return 
    $this->r;
        }
    }

    $RobotX = new XBan;
    $RobotX->UserIP $_SERVER['REMOTE_ADDR'];
    $RobotX->false;

    if(
    $RobotX->ChDet($RobotX->UserIP) == true)
    {
        echo(
    "<h1>Forbidden</h1>");
    }
    else
    {
        if(
    $RobotX->ChTime($RobotX->UserIP) == true)
        {
            echo(
    "Stop!");
        }
        else
        {
            echo(
    "Ok!");
        }
    }

    ?>
    :rolleyes:
     
    #7 ~X3RiX~, 20 Mar 2008
    Last edited: 20 Mar 2008