View Single Post
Old 07/05/2014, 11:54 PM   #165
stabker
High-roller
 
Join Date: Mar 2012
Posts: 1,311
Reputation: 86
Default Re: Атака сервера

От флуда incomming connection. Делал на будущее для себя и решил выложить сюда (хотя бы в качестве примера). Не тестировал. Если собираетесь использовать, настоятельно рекомендую настроить и оттестировать.

pawn Code:
public OnIncomingConnection(playerid, ip_address[], port)
{
    #define MAX_IPS         25      //Максимальное количество ип адресов, которое может храниться в массиве
    #define MAX_WARNINGS    10      //Максимальное количество предупреждений, после которого последует бан
    #define MIN_INTERVAL    3000    //Минимальный интервал между подключениями (в миллисекундах)
   
    enum ip_enumerator
    {
        Ip[16],
        Second
    }
    static Connection[MAX_IPS][ip_enumerator], Ip_Warnings[MAX_IPS char];
   
    if(!strcmp("127.0.0.1", ip_address)) return 1; //Ботов не проверяем
   
    new curtick = GetTickCount(), i;
   
    for(; i < MAX_IPS; i++)
    {
        if(Connection[i][Ip][0] == ip_address[0] && !strcmp(ip_address, Connection[i][Ip]))
        {
            if(curtick - Connection[i][Second] < MIN_INTERVAL)
            {
                if(Ip_Warnings{i}++ > MAX_WARNINGS)
                {
                    BlockIpAddress(ip_address, 600000);
                    Connection[i][Ip][0] = EOS;
                    Connection[i][Second] = Ip_Warnings{i} = 0;
                    //Не знаю, нужно ли здесь самому кикать этого игрока
                    return 1;
                }
            }
            else Ip_Warnings{i} = 0;
           
            Connection[i][Second] = curtick;
           
            return 1;
        }
    }
   
    for(i = 0; i < MAX_IPS; i++)
    {
        if(curtick - Connection[i][Second] > MIN_INTERVAL)
        {
            strmid(Connection[i][Ip], ip_address, 0, 16, 16);
            Connection[i][Second] = curtick;
            Ip_Warnings{i} = 0;
            break;
        }
    }
   
    return 1;
}

Last edited by stabker; 08/05/2014 at 09:40 AM.
stabker is offline   Reply With Quote