kucklovod1998
Компетентный
Фикс ддоса который убьет ваш сервер :af:
Ко всем define
Ко всем new
В public OnFilterScriptInit()
В public OnFilterScriptExit()
В public OnIncomingConnection(playerid, ip_address[], port)
На этом все , банит ип на 30 минут , по желанию можете сделать на всегда ))
Ко всем define
Код:
#define JOIN_FLOD_TIME 6
#define MAX_JOIN_FLOOD 10
Код:
new
DB:JoinFloodDataBase,
jf_string[164],last_clear;
Код:
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;
Код:
db_close(JoinFloodDataBase);
Код:
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 минут , по желанию можете сделать на всегда ))
