Бан диапазона IP по ID игрока
#1

На сервере существует система "мягкого" бана - забаненный таким образом игрок не может убивать других, его передвижения другим не видны (return 0 в OnPlayerUpdate), не может выполнять миссии, писать в чат, но остаётся на сервере. В последнее время стали появляться читеры, которые телепортируются и взрывают весь незанятый транспорт и мягкий бан их не останавливает. Было решено против таких раздолбаев сделать временный бан диапазона IP, примерно на полчаса, так как читер скорее всего успокоится, а нормальные игроки страдать от этого не будут.

Нужно выписать такой бан командой из мода, которая проверяет, имеется ли у игрока мягкий бан, и если да, то выписывается бан диапазона IP.

Использовал такой код, но он не работает:
Код:
if(PlayerInfo[giveplayerid][pSban] == 1)
					{
						new ip[128];
						GetPlayerIp(giveplayerid,ip,sizeof(ip));
						strdel(ip,strlen(ip)-2,strlen(ip));
						format(ip,128,"%s**",ip);
						format(ip,128,"banip %s",ip);
						SendRconCommand(ip);
}
Прошу помочь разобраться
Reply
#2

Не знаю как у остальных, но у меня динамика. Бывает начинается с 95.хх.хх.хх или с 46.хх.хх.хх, местоположение определяет как соседняя область.
Reply
#3

Что именно не работает? Попробуйте прологировать строчку, которая посылается в rcon.
Reply
#4

код - бред. Он будет работать лишь в определённых случаях. Юзайте split
Reply
#5

что за split ?
Reply
#6

я может чуть не понял но у меня бан ип так делается
Код:
if(strcmp(cmd, "/обход", true) == 0){
GetPlayerName(playerid, sendername, sizeof(sendername));
PlayerInfo[playerid][pAdmin] = dini_Int(udb_encode(sendername), "level");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp) && PlayerInfo[playerid][pAdmin] >= 1){
SendClientMessage(playerid, COLOR_RED, "Не правильный синтаксис. Используйте: /обход [ид_игрока]");
return 1;
}
giveplayerid = strval(tmp);
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
GetPlayerName(playerid, sendername, sizeof(sendername));
if(logged[playerid] == 1){
if(PlayerInfo[playerid][pAdmin] >= 1){
if(IsPlayerConnected(giveplayerid)){
SendClientMessage(playerid, COLOR_GREEN, "Вы забанили подсеть данного игрока за обход наказания");
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
format(string, sizeof(string), "< %s(%d) забанен: Причина: обход наказания. См. /правила", giveplayer, giveplayerid);
SendClientMessageToAll(COLOR_YELLOW, string);
new string1[256], string2[256];
format(string, sizeof(string), "< %s(%d) ушел(а) c сервера. (Бан)", giveplayer, giveplayerid);
SendClientMessageToAll(COLOR_YELLOW,string);
format(string2,sizeof(string2),"%s",giveplayer);
format(string1,sizeof(string1),"%s(B)",giveplayer); 
SetPlayerName(giveplayerid,string1); 
SendDeathMessage(INVALID_PLAYER_ID,giveplayerid,201);
SetPlayerName(giveplayerid,string2); 
printf("< %s(%d) забанен: Причина: обход наказания.(Подсеть-обход)",giveplayer, giveplayerid);
new ip[32];
GetPlayerIp(giveplayerid,ip,sizeof(ip));
strdel(ip,strlen(ip)-4,strlen(ip));
format(ip,sizeof(ip),"%s*.*",ip);
format(ip,sizeof(ip),"banip %s",ip);
SendRconCommand(ip);
Kick(giveplayerid);
return true;
}else{
format(string, sizeof(string), "%d игрок не подключен.", giveplayerid);
SendClientMessage(playerid, COLOR_RED, string);
}}else{
SendClientMessage(playerid, COLOR_RED, "У Вас нет разрешения использовать ту команду!");
return 1;
}}else{
SendClientMessage(playerid, COLOR_RED, "Вы Должны быть загружены, чтобы использовать эту команду!");}
return 1;}
PS делает бан с команды /обход [ид_игрока] при этом сверяет админ ли тот кто написал команду или нет
Reply
#7

Когда я вижу баны типа 1.2.*.*, мне всегда хочется узнать: вы в курсе, что в интернете классовую адресацию уже давно не используют при выделении ip адресов?

Рекомендую изучить: CIDR. Если кто знает английский, то можно глянуть еще тут: http://ip2cidr.com/cidr.php
Reply
#8

Показал бы пример использования CIDR.
Reply
#9

У меня сети банятся по номеру автономной системы. Номер AS по айпи получаю с помощью базы MaxMind GeoLite ASN. Если интересно посмотреть, как это сделано у меня, то я когда-то выкладывал весь игровой режим парадиза на гугл-код.

Примером на павне поделиться не могу, за его отсутствием.
Reply
#10

Quote:

Когда я вижу баны типа 1.2.*.*, мне всегда хочется узнать: вы в курсе, что в интернете классовую адресацию уже давно не используют при выделении ip адресов?

Defrago, представьте себе, что я использую небольшого местного провайдера с парочкой шлюзов. Зашел с моего провайдера читерок, вы его забанили, а теперь я хочу зайти на ваш сервер и поиграть. Я сразу иду лесом? Верно?

Очень непродуманно.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)