[Tool/Web/Other] Funciones y metodos utiles para evitar ataques (desde script)
#1

Bueno recientemente se crearon varios temas solicitando ayuda en algunos de ellos para detener ataques hacia los servidores.
En este topic publicare algunos de los metodos que se utilizan para parar ataques desde el script (es decir que no son validos para ataques tipo DOS, DDOS, y agentes externos al servidor).

Evitar Bots desde una misma IP: por el equipo de SA-MP
Si bien existe un filterscript el cual viene por defecto con el servidor de SA-MP llamado maxip.pwn, mostrare el medoto, ya que no todos lo conocen.
pawn Код:
#define MAX_IPS    (3)

new IP[MAX_PLAYERS][16];

public OnPlayerConnect(playerid)
{
    new contador;
    GetPlayerIp(playerid, IP[playerid], 16);
    for(new user; user<GetMaxPlayers(); user++)
        if(IsPlayerConnected(user))
            if(!strcmp(IP[playerid], IP[user]))
                contador++;
    if(contador>=MAX_IPS)
        Kick(playerid);
    return 1;
}
Evitar Bots desde la misma IP que conectan y desconectan por JernejL
pawn Код:
#define MAX_BOTS    (50)

enum bInfo
{
    bIP,
    bTime
};

new Bots[MAX_BOTS][bInfo], bCount;

public OnPlayerConnect(playerid)
{
    new IP[16];
    GetPlayerIp(playerid, IP, 16);
    Bots[bCount][bIP] = IpToInt(IP);
    Bots[bCount][bTime] = GetTickCount();
    for(new i; i<MAX_BOTS; i++)
    {
        if(Bots[bCount][bIP] != Bots[i][bIP])
            continue;
        if(GetTimeDistance(Bots[bCount][bTime], Bots[i][bTime])<=1000)
            Bots[bCount][bTimes]++;
    }
    if(Bots[bCount][bTimes]>3)Ban(playerid);
    bCount++;
    if(bCount>=MAX_BOTS)
        bCount = 0;
    return 1;
}

IpToInt(const szIP[])//by RyDeR`, JernejL
{
    new aiBytes[4 char], iPos = 0;
    aiBytes{0} = strval(szIP[iPos]);
    while(szIP[iPos] != EOS && szIP[iPos++] != '.') {}
    aiBytes{1} = strval(szIP[iPos]);
    while(szIP[iPos] != EOS && szIP[iPos++] != '.') {}
    aiBytes{2} = strval(szIP[iPos]);
    while(szIP[iPos] != EOS && szIP[iPos++] != '.') {}
    aiBytes{3} = strval(szIP[iPos]);
    return aiBytes[0];
}

intabs(innumber)//by JernejL
{
    if(innumber < 0)return -innumber;
    return innumber;
}

Distance1Dint(fPos1, fPos2)//by JernejL
{
    if (fPos1 > fPos2)return intabs(fPos1 - fPos2);
    return intabs(fPos2 - fPos1);
}

GetTimeDistance(a, b)//by JernejL
{
    if((a < 0) && (b > 0)){
        new dist;
        dist = Distance1Dint(a, b);
        if(dist > 2147483647)return Distance1Dint(a - 2147483647, b - 2147483647);
        return dist;
    }
    return Distance1Dint(a, b);
}
Evitar Flood de muertes: por Cessil
pawn Код:
new DeathSpam[MAX_PLAYERS char], LastDeath[MAX_PLAYERS];
public OnPlayerDeath(playerid, killerid, reason)
{
    new time = gettime();
    switch(time - LastDeath[playerid])
    {
        case 0 .. 3:
        {
            DeathSpam{playerid}++;
            if(DeathSpam{playerid} >= 3)
                Kick(playerid);
        }
        default:
            DeathSpam{playerid} = 0;
    }
    LastDeath[playerid] = gettime();
    return 1;
}
Todos son bienvenidos a subir los metodos que utilizen para estos u otros ataques en este tema.
Reply
#2

Muy ъtil, lo voy a tener en cuenta.

A quй llama Spawn masivo de vehнculos? A transportarse de vehнculo en vehнculo o hacer aparecer un vehнculo en tu posiciуn sin entrar?.

El flood de muertes que provocarнa?

Y el tema de los bots, no es mбs efectivo el segundo mйtodo?

Gracias por el aporte
Reply
#3

Quote:
Originally Posted by santi.arg
Посмотреть сообщение
Muy ъtil, lo voy a tener en cuenta.

A quй llama Spawn masivo de vehнculos? A transportarse de vehнculo en vehнculo o hacer aparecer un vehнculo en tu posiciуn sin entrar?.

El flood de muertes que provocarнa?

Y el tema de los bots, no es mбs efectivo el segundo mйtodo?

Gracias por el aporte
Aca te dejo un video para que veas a lo que se refiere el spawn masivo de autos: link.

El flood de muertes lo que genera es que no veas en la tabla de muertes (SendDeathMessage) a nadie, excepto al que esta realizando el flood, similar a un flood en el chat, pero sobre la tabla de muertes.

Y sobre los bots, son medotos diferentes, muchos conectan bots sin desconectar los viejos, forma muy basica de DOS (imposible tirar un sv con este metodo, pero suficientemente molesto para ser evitado). El segundo es para un DOS/DDOS de bots.
Reply
#4

Probй el spawn de vehнculos con el ****** pero no, no funciona. Sinceramente estuve pensando de cуmo podrнa bloquear eso pero, por ahora, no se me ocurriу.
Reply
#5

The Chaoz (unbanned ?) Otro dato interesante es que algunos tipos de bots SIEMPRE tiene un ping de 65535

Bueno Trabajo !! Gracias
Reply
#6

Quote:
Originally Posted by the_chaoz
Посмотреть сообщение
Aca te dejo un video para que veas a lo que se refiere el spawn masivo de autos: link.
OFF-TOPIC: estaba escuchando la misma mъsica!

IN-TOPIC: Yo creн que con "spawn masivo de autos" te referнas a poner todos los carros en un solo lugar, muy tipico del S0B3IT...
Reply
#7

Quote:
Originally Posted by Edugta.
Посмотреть сообщение
OFF-TOPIC: estaba escuchando la misma mъsica!

IN-TOPIC: Yo creн que con "spawn masivo de autos" te referнas a poner todos los carros en un solo lugar, muy tipico del S0B3IT...
No, "CAR MASS SPAWN" йs Cleo ..

Vea esto:
https://sampforum.blast.hk/showthread.php?tid=354537
Reply
#8

Recomiendo que hagan un timer que cada 5 segundos ponga el servidor normal osea hostname, gravity, weburl, mapname, maxnpc 0 (si no tienen ninguno) y mejor que todo rcon 0 usen el sistema de admin para que no descubran su rcon con 0 la desactivamos.

En cuando a el timer que normalize si se fijan en mis post hice un sistema "CSeguridad" con un pequeсo anticheat y un normalizador.

Saludos
Reply
#9

Pues bueno, este sistema es para evitar el flood de carros y que los hackers se teletransporten a los carros:

pawn Код:
new Carro[MAX_PLAYERS];
public OnPlayerEnterVehicle(playerid, vehicleid)
{
    Carro[playerid] = 1;
    return 1;
}

public OnPlayerExitVehicle(playerid, vehicleid)
{
    Carro[playerid] = 0;
    return 1;
}

public OnPlayerStateChange(playerid, newstate, oldstate)
{
    if(newstate == PLAYER_STATE_DRIVER || newstate == PLAYER_STATE_PASSENGER)
        if(Carro[playerid] == 0)
            Kick(playerid)
    return 1;
}
Y cada vez que se use el PutPlayerInVehicle actualizar la variable:
Код:
Carro[playerid] = 1;
Reply
#10

Quote:
Originally Posted by ipsBruno
Посмотреть сообщение
The Chaoz (unbanned ?) Otro dato interesante es que algunos tipos de bots SIEMPRE tiene un ping de 65535

Bueno Trabajo !! Gracias
No sabia eso... Buena info.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)