Portal SAMP
[Ajuda] Anti divulgação - Versão de Impressão

+- Portal SAMP (https://portalsamp.com)
+-- Fórum: SA-MP (https://portalsamp.com/forumdisplay.php?fid=5)
+--- Fórum: Área de suporte (https://portalsamp.com/forumdisplay.php?fid=6)
+--- Tópico: [Ajuda] Anti divulgação (/showthread.php?tid=2746)



Anti divulgação - hiwyn - 01/09/2022

Meu anti divulgação de IPs está kickando pessoas inoscentes, pessoas que nem estavam divulgando, só mandaram uns numeros tão tomando kick
Alguém tem ou sabe fazer um melhor pra bloquear links e/ou ips?

Código:
if(FindIpPattern(playerid,ver_string)) {
    new string[128];
    format(string,sizeof(string),"%s kickado por divulgação", PlayerName(playerid));
    SendClientMessageToAll(COLOR_LIGHTRED, string);
    Kick(playerid);
    return 0;
}

Código:
forward FindIpPattern(playerid,const string[]); public FindIpPattern(playerid,const string[]) {
    new stringNumeric = false, stringBegin, ipDigits = 0;
    for(new i=0; i<strlen(string); i++) {
        if(string[i]<='9' && string[i]>='0')
        {
            if(!stringNumeric) // first digit
            {
                stringNumeric=true;
                stringBegin=i;
                if(i==strlen(string)-1) // string ends with one digit number
                {
                    ipDigits++;
                    if(ipDigits>3) // 4 digits
                    return 1;
                }
            }
            else
            {
                if(i==strlen(string)-1) // string ends with the last digit
                {
                    new stringn[256];
                    new number;
                    for(new j=stringBegin; j<i+1; j++)
                    stringn[j-stringBegin]=string[j];
                    stringn[i-stringBegin+1]=0;
                    number=strval(stringn);
                    if(number>=0 && number<256) // our case
                    {
                        ipDigits++;
                        if(ipDigits>3) // 4 digits
                        return 1;
                    }
                }
            }
        }
        else
        {
            if(stringNumeric) // last digit+1
            {
                stringNumeric=false;
                new stringn[256];
                new number;
                for(new j=stringBegin; j<i; j++)
                stringn[j-stringBegin]=string[j];
                stringn[i-stringBegin]=0;
                number=strval(stringn);
                if(number>=0 && number<256) // our case
                {
                    ipDigits++;
                    if(ipDigits>3) // 4 digits
                    return 1;
                }
                else // not in ip-group range
                {
                    ipDigits=0; // reset ip digit counter;
                }
            }
        }
    }
    return 0;
}



RE: Anti divulgação - xbruno1000x - 01/09/2022

Pelo que eu entendi do código, ele está verificando apenas os números. Para uma string numérica ser um IP, necessita de pontos finais.

127.0.0.1 é um IP.
127001 é um número.

Tente adicionar uma verificação para 3 pontos finais.