Доступ к готовым решениям

Переход в группу "Пользователь"

300.00 ₽
Одноразовый платёж
Быстрый переход в группу "Пользователи", без надобности написания постов и ожидания.

Покупка дает возможность:
Быть полноправным участником форума
Нормальное копирование кода
Создавать темы
Скачивать файлы
Доступ к архиву Pawno-Info

Урок Защита RCON доступа

Статус
В этой теме нельзя размещать новые ответы.

PARTYRNAKS

Дебютант
Всем привет
Сегодня я покажу вам защиту RCON доступа (Самую надежную)

Для удобности создаем #define
PHP:
#define ADMIN(%0,%1)			!strcmp(PlayerInfo[%0][pNames], %1, false)       //Проверка на ник Администратора. Если есть своя переменная ника игрока используем ее так(Name[%0], pInfo[%0][pName] и т.д.)
#define foreach(%0:%1) 			for(new %0 = 0; %0 < %1; %0++)                    //Знаю, что есть нормальный инклуд foreach, по этом тут уже на свой вкус

Далее ищем паблик OnRconLoginAttempt
PHP:
public OnRconLoginAttempt(ip[], password[], success)
{
	new pip[16];
	if !success*then //Если пароль введен неверно, то
	{
		printf("Попытка взлома Rcon пароля игроком под IP: %s .Вводимый пароль: %s",ip, password);//Выводим сообщение к ноцоль о попытке взлома
		foreach(i:MAX_PLAYERS) //Узнаем ID игроков Online
		{
			GetPlayerIp(i, pip, sizeof(pip)); //Узнаем IP игроков Online
			if !strcmp(ip, pip, true)*then //Если IP игрока совпадает с IP взломщика, то
			{
				if ADMIN(i,"M4jORiK")*then return SendClientMessage(i, COLOR(FFFFFF), "Вспоминай пароль!"); // Если игрок администратор, вызывается откат функции и вывод сообщения
				SendClientMessage(i, COLOR(ADC7E7), "You are banned from this server.."), Ban(i); return true; // В противном случаи, выдается БАН(так-же бан можно ставить на свое усмотрение)
			}
		}
	}
	else //Либо, если пароль введен верно
	{
		foreach(i:MAX_PLAYERS) //Узнаем ID игроков Online
		{
			GetPlayerIp(i, pip, sizeof(pip)); //Узнаем IP игроков Online
			if !strcmp(ip, pip, true)*then //Если IP игрока совпал с IP игрока, который знает(угадал, взломал и т.д.) RCON пароль, то
			{
				if ADMIN(i,"M4jORiK")*then
				{
					SendClientMessage(i, COLOR(FFFFFF), "Вы успешно вошли как {00AAFF}RCON Администратор"); //Если игрок администратор, вызывается откат функции, выдается RCON доступ и выводится сообщения
					return true;
				}
				SendClientMessage(i, COLOR(FFFFFF), "Вы не {00AAFF}RCON Администратор!"), Ban(i);// В противном случаи, выдается БАН за попытку взлома RCON пароля
				//Так-же можно добавлять свои действия как для Админов, так и для взомщиков
			}
		}
	}
	return true;
}
Для тех, кто не освоил вариант этого кода, оставляю старый(без #define)
PHP:
public OnRconLoginAttempt(ip[], password[], success) {
    if(!success) //If the password was incorrect
    {
        printf("Попытка взлома RCON пароля игроком под IP: %s .Вводимый пароль: %s",ip, password);
        new Nick[MAX_PLAYER_NAME];
        new pip[16];
        for(new i=0; i<MAX_PLAYERS; i++) //Ищем Взломщика
        {
            GetPlayerIp(i, pip, sizeof(pip));
            if(!strcmp(ip, pip, true)) //Если у игрока и взломщика тот же IP, то
            {
                GetPlayerName(i, Nick, sizeof(Nick));

                if(!strcmp(Nick, "PARTYRNAKS", false))//Сюда ник RCON администратора
                {
                    SendClientMessage(i, 0xAA3333AA, "Вспоминай Пароль!");
                    return 1;
                }

                SendClientMessage(i, 0xFFFFFFFF, "Неверный RCON пароль. Бан!"); //Пишется данное сообщение 
                Ban(i); //Все Игрок Забанен
                return 1;
            }
        }
    }
    else
    {
        //printf("Попытка взлома RCON пароля игроком под IP: %s .Вводимый пароль: %s",ip, password);
        new pip[16];
        new Nick[MAX_PLAYER_NAME];
        for(new i=0; i<MAX_PLAYERS; i++) //Ищем взломщика
        {
            GetPlayerIp(i, pip, sizeof(pip));
            if(!strcmp(ip, pip, true)) //Если у игрока и взломщика тот же IP, то
            {
                GetPlayerName(i, Nick, sizeof(Nick));

                if(!strcmp(Nick, "PARTYRNAKS", false))//Сюда ник RCON администратора
                {
                    SendClientMessage(i, 0xAA3333AA, "Вы успешно вошли");//Если пароль и ник совпадают то
                    SetPVarInt(i, "AR", 1);
                    return 1;
                }

                SendClientMessage(i, 0xAA3333AA, "Вы не RCON администратор!");//Если пароль введен верно но ник не совпадает то
                Ban(i);

            }
        }
    }
    return 1;
}
Даная защита позволит только вам - RCON администраторам входить в RCON доступ

Обновлено: 20.03.2015
Как оказалось можно ставить несколько администраторов

Обновлено: 20.08.2018
Оптимизирован код(как по мне более солиднее смотрится)

P.S. Для того что бы не было багов найдите у себя в моде такую строчку
PHP:
public OnRconLoginAttempt(ip[], password[], success)
Помогло? Поставь +
 
Последнее редактирование:
Статус
В этой теме нельзя размещать новые ответы.
Сверху Снизу