Baneo por IP.
#1
Buenas noches... tengo una inquietud, se puede crear un plugin que trabaje como el "ban por ip" pero este banee los primeros numeros de la misma? entiendo que si banea el prefijo toda persona que empiece por el mismo quedaría baneada.. pero estoy mirando que esta persona que entra a mi server a chitear tiene un prefijo que no suelo ver.. sinceramente estoy cansado de esto.. jaja.
[Imagen: b15df1c47652f39223d1d29631bdc006o.png]
Responder
#2
Se puede, pero vas a dejar mucha gente afuera que no tuvo nada que ver!
[Imagen: paypalqr.png]
Responder
#3
Código PHP:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Range Ban"
#define VERSION "1.0"
#define AUTHOR "Alka"

#define MAX_BAN_TIME 43200

new gBanFile[64];

public 
plugin_init() {
    
    
register_plugin(PLUGINVERSIONAUTHOR);
    
    
register_concmd("amx_rangeban""cmdBanRange"ADMIN_BAN"<range> <reason> <time>");
}

public 
plugin_cfg()
{
    
formatex(gBanFilesizeof gBanFile 1"banned_range.cfg");
    
    if(!
file_exists(gBanFile))
        
write_file(gBanFile"", -1);
}

public 
cmdBanRange(idlevelcid)
{
    if(!
cmd_access(idlevelcid4))
        return 
1;
    
    static 
szRange[32], szReason[64], szTime[10];
    
read_argv(1szRangesizeof szRange 1);
    
read_argv(2szReasonsizeof szReason 1);
    
read_argv(3szTimesizeof szTime 1);
    
    for(new 
strlen(szRange) ; i++)
    {
        if(
szRange[i] == '.')
            continue;
        
        if(!
isdigit(szRange[i]))
        {
            
client_print(idprint_console"Sorry, IP range must contain only digits!");
            return 
1;
        }
    }
    
    if(!
szReason[0])
        
formatex(szReasonsizeof szReason 1"IP range banned");
    
    if(
str_to_num(szTime) > MAX_BAN_TIME)
    {
        
client_print(idprint_console"Sorry, max. ban time is : %d min!"MAX_BAN_TIME);
        return 
1;
    }
    
    new 
iFile fopen(gBanFile"at+");
    
    static 
szBuffer[128];
    
formatex(szBuffersizeof szBuffer 1"%s;%s;%d^n"szRangeszReasonstr_to_num(szTime) ? (get_systime() + (str_to_num(szTime) * 60)) : 0);
    
    
fprintf(iFileszBuffer);
    
fclose(iFile);
    
    
client_print(idprint_console"Successfully added IP range ^"%s^" in ban list for %d min!"szRangestr_to_num(szTime));
    
    static 
szPlayers[32], iNum;
    
get_players(szPlayersiNum"ch");
    
    for(new 
iNum i++)
    {
        static 
szIp[32];
        
get_user_ip(szPlayers[i], szIpsizeof szIp 11);
        
        new 
iCount;
        
        for(new 
strlen(szRange) ; j++)
        {
            if(
szRange[i] == szIp[i])
                
iCount++;
            
            if(
iCount >= strlen(szRange))
                
server_cmd("kick #%d ^"Banned!^""get_user_userid(szPlayers[i]));
        }
    }
    return 
1;
}

public 
client_connect(id)
{
    static 
szIp[32];
    
get_user_ip(idszIpsizeof szIp 11);
    
    new 
iFile fopen(gBanFile"rt");
    
    static 
szBuffer[128];
    static 
szInfo[3][64];
    
    new 
iFitCount;
    
    while(!
feof(iFile))
    {
        
fgets(iFileszBuffersizeof szBuffer 1);
        
        if(
szBuffer[0] == ';')
            continue;
        
        
str_piece(szBufferszInfosizeof szInfosizeof szInfo[] - 1';');
        
        for(new 
strlen(szInfo[0]) ; i++)
        {
            if(
szInfo[0][i] == szIp[i])
                
iFitCount++;
        }
        if(
iFitCount >= strlen(szInfo[0]))
        {
            if(
str_to_num(szInfo[2]) <= 0)
            {
                
server_cmd("kick #%d ^"Banned! [Reason : %s] [Time remaining 0min:0sec]^""get_user_userid(id), szInfo[1]);
                break;
            }
            if(
get_systime() <= str_to_num(szInfo[2]))
            {
                
server_cmd("kick #%d ^"Banned! [Reason : %s] [Time remaining : %dmin:%dsec]^""get_user_userid(id), szInfo[1], (str_to_num(szInfo[2]) - get_systime()) / 60, (str_to_num(szInfo[2]) - get_systime()) % 60);
                break;
            }
        }
    }
    
fclose(iFile);
}

stock str_piece(const input[], output[][], outputsizepiecelentoken '|')
{
    new 
= -1pieceslen = -;
    
    while ( 
input[++i] != )
    {
        if ( 
input[i] != token )
        {
            if ( ++
len piecelen )
                
output[pieces][len] = input[i] ;
        }
        else
        {
            
output[pieces++][++len] = ;
            
len = -;
            
            if ( 
pieces == outputsize )
                return 
pieces ;
        }
    }
    return 
pieces 1;

Responder
#4
(04/01/2021, 11:54 AM)Mario AR. escribió:
Código PHP:
#include <amxmodx>
#include <amxmisc>

#define PLUGIN "Range Ban"
#define VERSION "1.0"
#define AUTHOR "Alka"

#define MAX_BAN_TIME 43200

new gBanFile[64];

public 
plugin_init() {
 
 
register_plugin(PLUGINVERSIONAUTHOR);
 
 
register_concmd("amx_rangeban""cmdBanRange"ADMIN_BAN"<range> <reason> <time>");
}

public 
plugin_cfg()
{
 
formatex(gBanFilesizeof gBanFile 1"banned_range.cfg");
 
 if(!
file_exists(gBanFile))
 
write_file(gBanFile"", -1);
}

public 
cmdBanRange(idlevelcid)
{
 if(!
cmd_access(idlevelcid4))
 return 
1;
 
 static 
szRange[32], szReason[64], szTime[10];
 
read_argv(1szRangesizeof szRange 1);
 
read_argv(2szReasonsizeof szReason 1);
 
read_argv(3szTimesizeof szTime 1);
 
 for(new 
strlen(szRange) ; i++)
 {
 if(
szRange[i] == '.')
 continue;
 
 if(!
isdigit(szRange[i]))
 {
 
client_print(idprint_console"Sorry, IP range must contain only digits!");
 return 
1;
 }
 }
 
 if(!
szReason[0])
 
formatex(szReasonsizeof szReason 1"IP range banned");
 
 if(
str_to_num(szTime) > MAX_BAN_TIME)
 {
 
client_print(idprint_console"Sorry, max. ban time is : %d min!"MAX_BAN_TIME);
 return 
1;
 }
 
 new 
iFile fopen(gBanFile"at+");
 
 static 
szBuffer[128];
 
formatex(szBuffersizeof szBuffer 1"%s;%s;%d^n"szRangeszReasonstr_to_num(szTime) ? (get_systime() + (str_to_num(szTime) * 60)) : 0);
 
 
fprintf(iFileszBuffer);
 
fclose(iFile);
 
 
client_print(idprint_console"Successfully added IP range ^"%s^" in ban list for %d min!"szRangestr_to_num(szTime));
 
 static 
szPlayers[32], iNum;
 
get_players(szPlayersiNum"ch");
 
 for(new 
iNum i++)
 {
 static 
szIp[32];
 
get_user_ip(szPlayers[i], szIpsizeof szIp 11);
 
 new 
iCount;
 
 for(new 
strlen(szRange) ; j++)
 {
 if(
szRange[i] == szIp[i])
 
iCount++;
 
 if(
iCount >= strlen(szRange))
 
server_cmd("kick #%d ^"Banned!^""get_user_userid(szPlayers[i]));
 }
 }
 return 
1;
}

public 
client_connect(id)
{
 static 
szIp[32];
 
get_user_ip(idszIpsizeof szIp 11);
 
 new 
iFile fopen(gBanFile"rt");
 
 static 
szBuffer[128];
 static 
szInfo[3][64];
 
 new 
iFitCount;
 
 while(!
feof(iFile))
 {
 
fgets(iFileszBuffersizeof szBuffer 1);
 
 if(
szBuffer[0] == ';')
 continue;
 
 
str_piece(szBufferszInfosizeof szInfosizeof szInfo[] - 1';');
 
 for(new 
strlen(szInfo[0]) ; i++)
 {
 if(
szInfo[0][i] == szIp[i])
 
iFitCount++;
 }
 if(
iFitCount >= strlen(szInfo[0]))
 {
 if(
str_to_num(szInfo[2]) <= 0)
 {
 
server_cmd("kick #%d ^"Banned! [Reason : %s] [Time remaining 0min:0sec]^""get_user_userid(id), szInfo[1]);
 break;
 }
 if(
get_systime() <= str_to_num(szInfo[2]))
 {
 
server_cmd("kick #%d ^"Banned! [Reason : %s] [Time remaining : %dmin:%dsec]^""get_user_userid(id), szInfo[1], (str_to_num(szInfo[2]) - get_systime()) / 60, (str_to_num(szInfo[2]) - get_systime()) % 60);
 break;
 }
 }
 }
 
fclose(iFile);
}

stock str_piece(const input[], output[][], outputsizepiecelentoken '|')
{
 new 
= -1pieceslen = -;
 
 while ( 
input[++i] != )
 {
 if ( 
input[i] != token )
 {
 if ( ++
len piecelen )
 
output[pieces][len] = input[i] ;
 }
 else
 {
 
output[pieces++][++len] = ;
 
len = -;
 
 if ( 
pieces == outputsize )
 return 
pieces ;
 }
 }
 return 
pieces 1;


Gracias cumple con lo requerido !

(04/01/2021, 07:14 AM)Neeeeeeeeeel.- escribió: Se puede, pero vas a dejar mucha gente afuera que no tuvo nada que ver!

si, pero que tanta probabilidad se tiene que tener para que toquen los dos primeros prefijos de una ip con varios
Si puede pasar.
Responder
#5
(04/01/2021, 04:58 PM)Gstrigl escribió: Gracias cumple con lo requerido !


si, pero que tanta probabilidad se tiene que tener para que toquen los dos primeros prefijos de una ip con varios
Si puede pasar.

Los primeros numeros son primordiales. En todo caso, los últimos. Las clases de ip siempre empiezan por igual.
(12/03/2014, 08:11 PM)roccoxx escribió: jajajajajajajajajajajajajajajaajajajajajaajajajajajajajajajajajajajajajajajajajajajajajajajjajajjajajajajaja

todo eso elevado a la quinta potencia.
Responder
#6
(04/01/2021, 10:07 PM)acetatomil escribió: Los primeros numeros son primordiales. En todo caso, los últimos. Las clases de ip siempre empiezan por igual.

si claro entiendo.. mira por ejemplo.. con este plugin si pasa lo hablado.. al banear al que entro hoy a chitear baneo a medio server, en cambio otro usuario me paso un plugin que se debe agregar los prefijos de manera manual, desde el sma y con ese no tuve problemas..
Responder
#7
podes banear el rango de ip, donde el jugador no pueda cambiarse la ip. si no mal recuerdo "xx.xxx.xx", ya que los ultimos digidos dsp del cuarto punto, son posibles de cambiar por el usuario. Dudo mucho que usen un vpn, ya que se les,laguea todo V:
Responder
#8
(04/01/2021, 04:58 PM)Gstrigl escribió: Gracias cumple con lo requerido !


si, pero que tanta probabilidad se tiene que tener para que toquen los dos primeros prefijos de una ip con varios
Si puede pasar.

No es para nada raro, sobre todo para dos usuarios del mismo proveedor de internet
[Imagen: paypalqr.png]
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)