Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Anti incoming connection flood

kucklovod1998

Компетентный
Фикс ддоса который убьет ваш сервер :af:

Ко всем define
Код:
#define JOIN_FLOD_TIME          6    
#define MAX_JOIN_FLOOD          10
Ко всем new
Код:
new
        DB:JoinFloodDataBase,
        jf_string[164],last_clear;
В public OnFilterScriptInit()
Код:
 JoinFloodDataBase = db_open("JoinFloodDataBase.db");
        db_query(JoinFloodDataBase,"CREATE TEMP TABLE IF NOT EXISTS Join_Flood \
                (`ID` INTEGER PRIMARY KEY AUTOINCREMENT,`REMOTE_CLIENT` TEXT,`GRANULARITY` NUMERIC)"
        );
        last_clear = gettime()+60*5;
В public OnFilterScriptExit()
Код:
db_close(JoinFloodDataBase);
В public OnIncomingConnection(playerid, ip_address[], port)
Код:
format(jf_string,sizeof(jf_string),"\
                SELECT COUNT(ID) AS TOTAL FROM `Join_Flood` WHERE `REMOTE_CLIENT` = '%s' \
                AND `GRANULARITY`+"#JOIN_FLOD_TIME" > %d ORDER BY ID DESC LIMIT "#MAX_JOIN_FLOOD"",ip_address,gettime()
        );
        new DBResult:result = db_query(JoinFloodDataBase,jf_string);
        db_get_field_assoc(result,"TOTAL",jf_string,sizeof(jf_string));
        db_free_result(result);
        if(strval(jf_string) >= MAX_JOIN_FLOOD) {
                format(jf_string,sizeof jf_string,"banip %s",ip_address); 
                SendRconCommand(jf_string);                               
                BlockIpAddress(ip_address,60*1000*30);                     
        }
        else if(gettime() > last_clear) {
                db_free_result(db_query(JoinFloodDataBase,"DELETE FROM Join_Flood"));
                last_clear = gettime()+60*10;
        }
        else {
                format(jf_string,sizeof(jf_string),"INSERT INTO Join_Flood (REMOTE_CLIENT,GRANULARITY) VALUES ('%s','%d')",ip_address,gettime());
                db_free_result(db_query(JoinFloodDataBase,jf_string));
        }
        return 1;

На этом все , банит ип на 30 минут , по желанию можете сделать на всегда ))
 
Сверху Снизу