Mensajes: 385
Temas: 144
Registro en: Mar 2020
Reputación:
0
04/01/2021, 12:46 AM
(Última modificación: 04/01/2021, 12:47 AM por Gstrigl.)
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.
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
Se puede, pero vas a dejar mucha gente afuera que no tuvo nada que ver!
Mensajes: 2,571
Temas: 40
Registro en: Feb 2014
Reputación:
72
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(PLUGIN, VERSION, AUTHOR); register_concmd("amx_rangeban", "cmdBanRange", ADMIN_BAN, "<range> <reason> <time>"); }
public plugin_cfg() { formatex(gBanFile, sizeof gBanFile - 1, "banned_range.cfg"); if(!file_exists(gBanFile)) write_file(gBanFile, "", -1); }
public cmdBanRange(id, level, cid) { if(!cmd_access(id, level, cid, 4)) return 1; static szRange[32], szReason[64], szTime[10]; read_argv(1, szRange, sizeof szRange - 1); read_argv(2, szReason, sizeof szReason - 1); read_argv(3, szTime, sizeof szTime - 1); for(new i = 0 ; i < strlen(szRange) ; i++) { if(szRange[i] == '.') continue; if(!isdigit(szRange[i])) { client_print(id, print_console, "Sorry, IP range must contain only digits!"); return 1; } } if(!szReason[0]) formatex(szReason, sizeof szReason - 1, "IP range banned"); if(str_to_num(szTime) > MAX_BAN_TIME) { client_print(id, print_console, "Sorry, max. ban time is : %d min!", MAX_BAN_TIME); return 1; } new iFile = fopen(gBanFile, "at+"); static szBuffer[128]; formatex(szBuffer, sizeof szBuffer - 1, "%s;%s;%d^n", szRange, szReason, str_to_num(szTime) ? (get_systime() + (str_to_num(szTime) * 60)) : 0); fprintf(iFile, szBuffer); fclose(iFile); client_print(id, print_console, "Successfully added IP range ^"%s^" in ban list for %d min!", szRange, str_to_num(szTime)); static szPlayers[32], iNum; get_players(szPlayers, iNum, "ch"); for(new i = 0 ; i < iNum ; i++) { static szIp[32]; get_user_ip(szPlayers[i], szIp, sizeof szIp - 1, 1); new iCount; for(new j = 0 ; j < 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(id, szIp, sizeof szIp - 1, 1); new iFile = fopen(gBanFile, "rt"); static szBuffer[128]; static szInfo[3][64]; new iFitCount; while(!feof(iFile)) { fgets(iFile, szBuffer, sizeof szBuffer - 1); if(szBuffer[0] == ';') continue; str_piece(szBuffer, szInfo, sizeof szInfo, sizeof szInfo[] - 1, ';'); for(new i = 0 ; i < 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[][], outputsize, piecelen, token = '|') { new i = -1, pieces, len = -1 ; while ( input[++i] != 0 ) { if ( input[i] != token ) { if ( ++len < piecelen ) output[pieces][len] = input[i] ; } else { output[pieces++][++len] = 0 ; len = -1 ; if ( pieces == outputsize ) return pieces ; } } return pieces + 1; }
Mensajes: 385
Temas: 144
Registro en: Mar 2020
Reputación:
0
04/01/2021, 04:58 PM
(Última modificación: 04/01/2021, 04:59 PM por Gstrigl.)
(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(PLUGIN, VERSION, AUTHOR); register_concmd("amx_rangeban", "cmdBanRange", ADMIN_BAN, "<range> <reason> <time>"); }
public plugin_cfg() { formatex(gBanFile, sizeof gBanFile - 1, "banned_range.cfg"); if(!file_exists(gBanFile)) write_file(gBanFile, "", -1); }
public cmdBanRange(id, level, cid) { if(!cmd_access(id, level, cid, 4)) return 1; static szRange[32], szReason[64], szTime[10]; read_argv(1, szRange, sizeof szRange - 1); read_argv(2, szReason, sizeof szReason - 1); read_argv(3, szTime, sizeof szTime - 1); for(new i = 0 ; i < strlen(szRange) ; i++) { if(szRange[i] == '.') continue; if(!isdigit(szRange[i])) { client_print(id, print_console, "Sorry, IP range must contain only digits!"); return 1; } } if(!szReason[0]) formatex(szReason, sizeof szReason - 1, "IP range banned"); if(str_to_num(szTime) > MAX_BAN_TIME) { client_print(id, print_console, "Sorry, max. ban time is : %d min!", MAX_BAN_TIME); return 1; } new iFile = fopen(gBanFile, "at+"); static szBuffer[128]; formatex(szBuffer, sizeof szBuffer - 1, "%s;%s;%d^n", szRange, szReason, str_to_num(szTime) ? (get_systime() + (str_to_num(szTime) * 60)) : 0); fprintf(iFile, szBuffer); fclose(iFile); client_print(id, print_console, "Successfully added IP range ^"%s^" in ban list for %d min!", szRange, str_to_num(szTime)); static szPlayers[32], iNum; get_players(szPlayers, iNum, "ch"); for(new i = 0 ; i < iNum ; i++) { static szIp[32]; get_user_ip(szPlayers[i], szIp, sizeof szIp - 1, 1); new iCount; for(new j = 0 ; j < 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(id, szIp, sizeof szIp - 1, 1); new iFile = fopen(gBanFile, "rt"); static szBuffer[128]; static szInfo[3][64]; new iFitCount; while(!feof(iFile)) { fgets(iFile, szBuffer, sizeof szBuffer - 1); if(szBuffer[0] == ';') continue; str_piece(szBuffer, szInfo, sizeof szInfo, sizeof szInfo[] - 1, ';'); for(new i = 0 ; i < 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[][], outputsize, piecelen, token = '|') { new i = -1, pieces, len = -1 ; while ( input[++i] != 0 ) { if ( input[i] != token ) { if ( ++len < piecelen ) output[pieces][len] = input[i] ; } else { output[pieces++][++len] = 0 ; len = -1 ; 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.
Mensajes: 466
Temas: 36
Registro en: Jan 2014
Reputación:
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.
Mensajes: 385
Temas: 144
Registro en: Mar 2020
Reputación:
0
(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..
Mensajes: 196
Temas: 4
Registro en: Apr 2018
Reputación:
3
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:
Mensajes: 4,637
Temas: 73
Registro en: Oct 2013
Reputación:
44
(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
|