Sign in to follow this  
Followers 0
Guest stibs

Защита аккаунта игрока - Проверка IP при входе

1 post in this topic

Сразу скажу, урок не совсем для новичков, его нужно подгонять под свой мод, уроков именно под ваш мод в общем доступе не бывает. Помните об этом. Данный урок не исключение, но если нужна помощь, то велком в сообщения этой темы.

Всем привет! Не делал я давненько уроков по защите игрока. Думаю, самое время это сделать. Давайте расскажу вам суть. Игрок заходит на сервер. Если IP текущей сессии и предыдущей различны, система отправит администрации текст, который поможет им распознать будущего взломщика. Проверять буду по подсети (первые два значения IP адреса), так как у многих уже сейчас динамический IP адрес, и проверять по полному адресу уже ни к чему. 


В начало мода (ко всем глобальным переменным):

new LastLoginIP[MAX_PLAYERS][7];

Далее идем в сток / паблик загрузки вашего аккаунта и добавляем:

//вставляем сюда загрузку LastLoginIP из бд / файлов
new ip[16], ips[4];
GetPlayerIp(playerid, ip, sizeof(ip));
sscanf(ip, "p<.>dddd", ips[0], ips[1], ips[2], ips[3]);// получаем ип адрес и каждое значение пишем в отдельную переменную
new str[7];
format(str, sizeof(str), "%d",ips[0]+ips[1]);
if(!strlen(LastLoginIP[playerid]))
{
    strmid(LastLoginIP[playerid], str, 0, strlen(str), sizeof(str)); // записываем данные в переменную, если еще не записано.
}
else
{
    if(LastLoginIP[playerid] != str)
    {
        //сюда можете поставить функцию отправки сообщения администраторам, я поставлю вывод в общий чат. сугубо индивидуально
        static const fmt_str[] = "Игрок %s подозревается во взломе / передаче аккаунта. У него не совпадает подсеть, значит, он сидит с разных городов!";
        new string[sizeof(fmt_str) + (-2+MAX_PLAYER_NAME)],
        name[MAX_PLAYER_NAME];
        GetPlayerName(playerid, name, sizeof(name));
        format(string, sizeof(string), fmt_str, name);
        SendClientMessageToAll(-1, string);
    }
}

В самой базе данных / файлах создайте место под данную переменную.

Спойлер

Идем в нашу бд и создаем новое поле в конец таблицы с параметрами:
Имя: ваше, которое будете использовать в сохранении / загрузке. 
Тип: int
Длина: 7
Значение по умолчанию: нет. 

Спойлер

Если у вас файлы, добавьте в загрузку / сохранение аккаунта данный параметр. 
Использовать при загрузке:
ini_getInteger(файл, "переменная", переменная для сохранения);
Использовать при сохранении:
ini_setInteger(файл, "переменная, которую указали выше", переменная для изменения);

Ну а после добавьте загрузку данного параметра. 

Спойлер

cache_get_field_content(0, "название переменной", LastLoginIP[playerid]);

 

Спойлер

Как выше указано:
 


ini_getInteger(переменная файла, "название переменной", LastLoginIP[playerid]);

 

Код загрузки вставлять перед кодом проверки на ип. 

Автор: @stibs

Если будут ошибки, пишите в тему.

При копировании на другие порталы указывайте ссылку на этот, а также мое авторство. 

Еще раз повторюсь, материал не может быть переделан под каждый мод в общем доступе. Его нужно подделывать под ваш, т.е. заменять переменные и прочее. Максимально универсально писал. 

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   You have pasted content with formatting.   Remove formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

Loading...
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Leo_Carter
      By Leo_Carter
      Такая проблема то что я пишу мод с нуля и когда почти мод был готов, я решил его залить на хостинг, ну там есть подключение к mysql и всё подобное, только вот залил на хостинг, запускаю и у меня вот такие дебаги вылезают и сервер Unknown

       
      Loaded log file: "server_log.txt". ---------- SA-MP Dedicated Server ---------------------- v0.3.7-R2, (C)2005-2015 SA-MP Team [18:54:42] filterscripts = "" (string) [18:54:42] [18:54:42] Server Plugins [18:54:42] -------------- [18:54:42] Loading plugin: mysql_static.so [18:54:42] >> plugin.mysql: R39-2 successfully loaded. [18:54:42] Loaded. [18:54:42] Loading plugin: pawncmd.so [18:54:42] Pawn.CMD plugin v3.1.4 by urShadow loaded [18:54:42] Loaded. [18:54:42] Loading plugin: pawnregex.so [18:54:42] Pawn.Regex plugin v1.1 by urShadow loaded [18:54:42] Loaded. [18:54:42] Loading plugin: crashdetect.so [18:54:42] CrashDetect v4.18.1 is OK. [18:54:42] Loaded. [18:54:42] Loading plugin: streamer.so [18:54:42] *** Streamer Plugin v2.8.2 by Incognito loaded *** [18:54:42] Loaded. [18:54:42] Loading plugin: sscanf.so [18:54:42] [18:54:42] =============================== [18:54:42] sscanf plugin loaded. [18:54:42] Version: 2.8.1 [18:54:42] (c) 2012 Alex "Y_Less" Cole [18:54:42] =============================== [18:54:42] Loaded. [18:54:42] Loaded 6 plugins. [18:54:42] [18:54:42] Filterscripts [18:54:42] --------------- [18:54:42] Loaded 0 filterscripts. [18:54:42] [debug] Run time error 19: "File or function is not found" [18:54:42] [debug] cache_get_value_name [18:54:42] [debug] cache_get_value_name_int [18:54:42] [debug] Run time error 19: "File or function is not found" [18:54:42] [debug] cache_get_value_name [18:54:42] [debug] cache_get_value_name_int [18:54:42] Script[gamemodes/project.amx]: Run time error 19: "File or function is not found" [18:54:42] Number of vehicle models: 0 [18:54:42] [debug] Run time error 19: "File or function is not found" [18:54:42] [debug] cache_get_value_name [18:54:42] [debug] cache_get_value_name_int [18:54:42] [debug] Run time error 19: "File or function is not found" [18:54:42] [debug] cache_get_value_name [18:54:42] [debug] cache_get_value_name_int