//Anti DDoS Attack Filterscript by Jankingston. Feel free to modify ;)
#include <a_samp>
#include <FileFunctions>
#define ATTACK_TYPE_PLAYERID 1
#define ATTACK_TYPE_IP 2
new File:ServerLogFile;
new addostimer;
main()
{
print("|----------------------------------|");
print("| Anti DDOS filterscript v0.1 |");
print("|----------------------------------|");
}
public OnFilterScriptInit()
{
ServerLogFile = fileOpen("server_log.txt", io_Read);
addostimer = SetTimer("AntiDDoS", 100, true);
return 1;
}
public OnFilterScriptExit()
{
KillTimer(addostimer);
return 1;
}
forward AntiDDoS();
public AntiDDoS()
{
if(!ServerLogFile)
{
print("Error opening server_log.txt!");
KillTimer(addostimer);
}
else
{
new string[128];
new strarr[2][20];
fileSeek(ServerLogFile, -128, seek_End);
while(fileRead(ServerLogFile, string)){}
new pos = strfind(string, "Invalid client connecting from ", true, 10);
if(pos == 11)
{
OnDDosAttackAttempt(ATTACK_TYPE_IP, INVALID_PLAYER_ID, string[pos+31]);
}
pos = strfind(string, "Warning: /rcon command exploit from: ", true, 10);
if(pos == 11){
split(string[pos+37], strarr, ':');
OnDDosAttackAttempt(ATTACK_TYPE_PLAYERID, strval(strarr[0]), strarr[1]);
}
pos = strfind(string, "Warning: PlayerDialogResponse PlayerId: ", true, 10);
if(pos == 11){
new idx = 0;
new plid = strval(strtok(string[pos+39], idx));
SetPVarInt(plid, "dialogDDosAtt", GetPVarInt(plid, "dialogDDosAtt")+1);
print("");
if(GetPVarInt(plid, "dialogDDosAtt") > 2)OnDDosAttackAttempt(ATTACK_TYPE_PLAYERID, plid, " ");
}
pos = strfind(string, "Warning: PlayerDialogResponse crash exploit from PlayerId: ", true, 10);
if(pos == 11){
new idx = 0;
OnDDosAttackAttempt(ATTACK_TYPE_PLAYERID, strval(strtok(string[pos+59], idx)), " ");
}
pos = strfind(string, "Packet was modified, sent by id: ", true, 10);
if(pos == 11){
split(string[pos+33], strarr, ',');
OnDDosAttackAttempt(ATTACK_TYPE_PLAYERID, strval(strarr[0]), " ");
}
pos = strfind(string, "Remote Port Refused for Player: ", true, 10);
if(pos == 11){
new idx = 0;
OnDDosAttackAttempt(ATTACK_TYPE_PLAYERID, strval(strtok(string[pos+32], idx)), " ");
}
if(strfind(string, " due to a 'server full' attack") != -1)
{
pos = strfind(string, "Blocking ", true, 10);
if(pos == 12)
{
new idx = 0;
OnDDosAttackAttempt(ATTACK_TYPE_IP, INVALID_PLAYER_ID, strtok(string[pos+9], idx));
}
}
}
}
forward OnDDosAttackAttempt(type, playerid, ip[]);
public OnDDosAttackAttempt(type, playerid, ip[])
{
new string[128];
if(type == ATTACK_TYPE_PLAYERID)
{//block a playerid
BanEx(playerid, "DDOS protect");
printf("Blocked attack from playerid %d", playerid);
}else if(type == ATTACK_TYPE_IP)
{//block an ip address
format(string, sizeof(string), "banip %s", ip);
SendRconCommand(string);
printf("Blocked attack from ip: %s", ip);
}
}
stock strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
stock split(const strsrc[], strdest[][], delimiter)
{
new i, li;
new aNum;
new len;
while(i <= strlen(strsrc)){
if(strsrc[i]==delimiter || i==strlen(strsrc)){
len = strmid(strdest[aNum], strsrc, li, i, 128);
strdest[aNum][len] = 0;
li = i+1;
aNum++;
}
i++;
}
return 1;
}
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46227
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46233
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46249
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46247
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46245
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46241
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46255
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46251
[BVJ-13:14:54] Incoming connection: 189.49.175.106:45841
[BVJ-13:14:54] Incoming connection: 189.49.175.106:46287
[BVJ-13:14:54] Incoming connection: 189.49.175.106:45843
[BVJ-13:14:54] Blocking 189.49.175.106 due to a 'server full' attack (1)
/////////////////////// aqui outra parte do cheat////////////////////////////////
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-13:44:25] Packet was modified, sent by id: 5, ip: 25.165.106.74:59321
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6513) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6512) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6511) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6510) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6509) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6508) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6507) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6506) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6505) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6504) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6503) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6502) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6501) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6500) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6499) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6498) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6497) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6496) Limit: 1000
SetTimer("Anti-DDoS", 100, true);
Esse FS tб com problema pelo previsto.
pawn Код:
|
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6513) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6512) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6511) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6510) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6509) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6508) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6507) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6506) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6505) Limit: 1000
[BVJ-07:53:42] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6504) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6503) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6502) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6501) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6500) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6499) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6498) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6497) Limit: 1000
[BVJ-07:53:43] Warning: client exceeded 'messageholelimit' (2) 127.0.0.1:55269 (-6496) Limit: 1000
pawn Код:
No Hosting nгo ocorre esses 'warnings' nгo. |
Use GetPlayers(); para verificar se sгo "bots invisнveis".
DDoS nгo para com scripts, pois й um ataque contra o servidor/rede em si. |
public OnPlayerConnect(playerid) {
new samp[20];
GetPlayerVersion(playerid, samp, 20);
if(strcmp(samp, "unknown", true) == 0) return Kick(playerid);
return 1;
}
No caso, bots podem ser identificados atй pegando a versгo SA-MP deles.. Ou pegando se estгo conectando muito rбpido..
Jб tentou usar em seu OnPlayerConnect (topo) pawn Код:
|
#include a_samp
#if !defined varGet
#define varGet(%0) getproperty(0,%0)
#endif
// https://sampforum.blast.hk/showthread.php?pid=1925909#pid1925909
//Dк rep pro ipsBruno acessando este link http://forum.sa-mp.com/reputation.php?p=1925893
#if !defined varSet
#define varSet(%0,%1) setproperty(0, %0, %1)
#endif
stock botGetIP[24];
#define IsPlayerBot(%0)\
GetPlayerPing(%0) == 65535 && (gettime() - varGet((GetPlayerIp(%0, botGetIP, sizeof botGetIP), botGetIP)) > 5)
public OnPlayerConnect(playerid)
{
if(IsPlayerNPC(playerid)) return false;
static playerip[24];
GetPlayerIp(playerid, playerip, 24);
if(gettime() - varGet(playerip) < 2)
{
strcat(playerip, "di_S");
if(gettime() - varGet(playerip) < 3) return false;
printf("%d Entrou em menos de 2 segundos", playerid);
GetPlayerIp(playerid, playerip, 20);
varSet(playerip, gettime());
strcat(playerip, "x");
static timers ;
timers = varGet(playerip);
varSet(playerip, 1+ timers);
if(timers > 2)
{
playerip[strlen(playerip) - 2] = 0;
printf("BOT: ID -> %d IP -> %s", playerid, playerip);
BanEx(playerid, "Bot Connect");
}
}
return varSet(playerip, gettime());
}
public OnPlayerDisconnect(playerid, reason)
{
if(reason == 2)
{
static playerip[20];
GetPlayerIp(playerid, playerip, 20);
strcat(playerip, "di_S");
varSet(playerip, gettime());
}
return false;
}
usa esse fs entao.
pawn Код:
|
[BVJ-20:49:06] Incoming connection: 192.168.0.162:38514
[BVJ-20:49:06] Incoming connection: 192.168.0.162:38770
[BVJ-20:49:06] Incoming connection: 192.168.0.162:39026
[BVJ-20:49:06] Incoming connection: 192.168.0.162:39282
[BVJ-20:49:06] Incoming connection: 192.168.0.162:39538
[BVJ-20:49:06] Incoming connection: 192.168.0.162:39794
[BVJ-20:49:06] Incoming connection: 192.168.0.162:40050
[BVJ-20:49:06] Incoming connection: 192.168.0.162:40306
[BVJ-20:49:06] Incoming connection: 192.168.0.162:40562
[BVJ-20:49:06] Incoming connection: 192.168.0.162:40818
[BVJ-20:49:06] Incoming connection: 192.168.0.162:41074
[BVJ-20:49:06] Blocking 192.168.0.162 due to a 'server full' attack (1)
Como jб falaram o ъnico metуdo para parar um ataque DoS й usando um bom hosting que dк uma уtima proteзгo.
|
o que me aconselhar um host pode fala em detalhes e me explicar melhor, compartilhe seu conhecimento pra todos
![]() |
(e que nгo venham com historinhas que SA-MP й um empreendimento igual algumas pessoas que se acham empreendedores porque tem uma pбgina no ********).
|
a pior coisa й mandar indireta ... e ainda pior й tirar palavras de um pessoa sem ao menos ela dizer isso ...
o teu mal й pensar q sabe tudo, se vc acha q eu so uma coisa , fica achando to nen ai ![]() se samp й um empreendimento ou n , quem й tu pra falar algo , tem servidor de samp q ta ganhando muito + q um trabalho . Bom , atualmente estou com '' pessoas fixas '' em torno de 7 cada uma me pagando 50 ~ 70 reais por mкs . com minha pбgina do ******** , alias ... meu blog ta uma coisa bem simples q meu amigo DiegoLkd fez , como eu disse ... pъblico n liga para o visual do blog e sim para o conteъdo . nгo julgue uma pessoa sу pq vc achar q ta certo , vc й ngm sу й +1 nesse forum q pensa q faz muita coisa . |