Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 17

Тема: Access from subnets (Доступ к авторизации только указанным подсетям)

  1. #1
    SYSTEM Аватар для Games
    Регистрация
    28.06.2010
    Адрес
    Moscow
    Возраст
    30
    Сообщений
    1,468
    Репутация: 478

    Звание: - луч света в тёмном царстве

    Сообщение Access from subnets (Доступ к авторизации только указанным подсетям)

    Приветствую!
    Недавно пришла идея ограничить доступ к авторизации, путем прикрепления к аккуанту списка разрешенных подсетей.
    Т.е. каждый игрок может указать до 3-ех подсетей, с которых будет возможна авторизация.

    Что такое подсеть? Это часть IP-адреса. Я взял только 2 первых значения.

    Например:





    Как это работает:

    Игрок вводит команду /subnet , появляется диалог:



    Игрок нажимает "Далее" появляется новый диалог:



    --------------------------------------------
    Использовать текущую подсеть - подсеть берется из текущего IP-адреса игрока
    Ввод подсетей - При нажатии на этот пункт появляется диалог:



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

    Удалить ограничение - убирает ограничение, теперь все подсети будут иметь доступ к авторизации.


    Если игрок попытается подключиться с ип, подсеть которого не имеет доступа, то игрока кикнет:



    Ну, вроде я объяснил, как это работает, теперь перейдем непосредственно к коду

    Создание системы:

    1) Вам необходимо сделать в своем моде сохранение в аккуант игрока строку с ключом;
    Если у вас есть система регистрации/авторизации, для вас не будет это проблемой.
    От вас требуются начальные знания Pawn.

    2) При регистрации этому ключу присвоить значение "none"

    3) Перед авторизацией нужно прочесть из файла аккуанта эту строку и добавить перед диалогом:

    PHP код:
    GetFileMask(playeridstring); // где string - строка, которая содержит данные из файла аккуанта (можете изменить на свое название) 

    4) В public OnPlayerCommandText(playerid, cmdtext[]) добавляем команду:
    PHP код:
    if(!strcmp(cmdtext,"/subnet",true))
    {
       
    ShowPlayerDialog(playeridD_SUBNETDIALOG_STYLE_MSGBOX" ","{ffcc00}Внимание!!! Неверная установка подсети приведет к тому, что вы не сможете получить доступ к аккуанту!\nЭтот мастер поможет заблокировать доступ к аккуанту с подсетей, которые не будут вами указаны.\nНажмите {ff0000}\"Далее\" {ffcc00}для продолжения.","Далее","Отмена");
        return 
    1;
    }
    // 
    5) В public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) добавляем:
    PHP код:
    switch (dialogid)
    {
        case 
    D_SUBNET:
        {
            if(!
    response) return 1;
            new 
    string[1024];
            
    format(string,sizeof(string),"{ffcc00}Использовать текущую подсеть[{00ff00}%s{ffcc00}]\n{ffcc00}Ввод подсетей (максимум 3)\n{ffcc00}Удалить ограничение",GetPlayerSubNet(playerid));
            
    ShowPlayerDialog(playeridD_SUBNET2DIALOG_STYLE_LIST"Ограничение по подсети"string"Ok""Cancel");
        }
        case 
    D_SUBNET2:
        {
            if(!
    response) return 1;
            switch(
    listitem)
            {
                case 
    0,2:
                {
                    if(
    listitem == 0)
                    {
                        
    //здесь запишите GetPlayerSubNet(playerid) в файл аккуанта игрока
                        
    SendClientMessage(playerid,0xFF00FF,"Вы установили доступ к аккуанту только с текущей подсети");
                    }
                    else
                    {
                        
    //здесь запишите "none" в файл аккуант игрока
                        
    SendClientMessage(playerid,0xFF00FF,"Вы отключили ограничение авторизации по подсети.");
                    }
                }
                case 
    1:
                {
                    
    ShowPlayerDialog(playeridD_SUBNET3DIALOG_STYLE_INPUT"{7fc7ff}Ввод подсети (подсетей)","{ffcc00}Чтобы разрешить доступ к авторизации с нескольких подсетей, их необходимо перечислить через запятую.\n{ffcc00}Максимальное количество подсетей: 3\n{ff0000}Примеры ввода:\n{ff0000}77.34,15.56 {ffcc00}- разрешает авторизацию с 2-ух подсетей (77.34 и 15.56)\n{ff0000}50.40 {ffcc00}- разрешает авторизацию только с одной подсети","Ок","Отмена");
                }
            }
        }
        case 
    D_SUBNET3:
        {
            if(!
    CheckMask(playerid,inputtext) || !response) return 1;
            new 
    string[256];
            
    format(string,sizeof(string),"Вы установили доступ к аккуанту только с подсетей (подсети) - %s",inputtext);
            
    SendClientMessage(playerid,0xFF00FF,string);
            
    //здесь запишите inputtext в файл аккуанта игрока
        
    }

    6) Ко всем #define вверху мода добавить:
    PHP код:
    //ид диалогов, при необходимости - изменить!!!!
    #define D_SUBNET 100  
    #define D_SUBNET2 101
    #define D_SUBNET3 102 
    7) Ну и самое главное - функции)
    Вниз мода добавить:
    PHP код:
    stock GetFileMask(playeridIP[])
    {
        if(!
    strcmp(IP,"none")) return 1;
        new 
    cIP[16],CountMask,FileMask[3][8];
        
    cIP GetPlayerSubNet(playerid);
        for(new 
    ioldpos<= strlen(IP); i++)
        {
            if(
    IP[i] == 0x2C || IP[i] == EOS)
            {
                
    strmid(FileMask[CountMask], IPoldposi);
                
    oldpos 1;
                
    CountMask++;
            }
        }
        for(new 
    i!= CountMaski++)
        {
            if(!
    strcmp(cIP,FileMask[i])) return 1;
        }
        
    SendClientMessage(playerid,0xFF0000,"Для данного аккуанта авторизация доступна только для некоторых подсетей.");
        
    Kick(playerid);
        return 
    1;
    }

    stock GetPlayerSubNet(playerid)
    {
        new 
    cIP[16];
        
    GetPlayerIp(playeridcIPsizeof(cIP));
        for(new 
    ibool:point!= strlen(cIP); i++)
        {
            if(
    cIP[i] != 0x2E) continue;
            if(!
    pointpoint true;
            else
            {
                
    strmid(cIPcIP0i);
                break;
            }
        }
        return 
    cIP;
    }

    stock CheckMask(playerid,IP[])
    {
        new 
    letter[4+1];
        if(
    strlen(IP) > 0x17) return SendClientMessage(playerid,0xFF0000,"Неверный ввод!Пишите подсети через запятую, без использования пробелов! Максимум 3 подсети!"), false;
        for(new 
    ioldposbool:point<= strlen(IP); i++)
        {
            if((
    IP[i] != EOS && IP[i] != 0x2E && IP[i] != 0x2C) && (IP[i] > 0x39 || IP[i] < 0x30)) return SendClientMessage(playerid,0xFF0000,"Неверный ввод! Используйте только \"0-9\",\".\",\",\""), false;
            if((
    IP[i] == 0x2E && !point) || (IP[i] == 0x2C && point) || (IP[i] == EOS && point))
            {
                
    strmid(letterIPoldposi);
                
    oldpos 1;
                if(
    strval(letter) < 0x0 ||  strval(letter) > 0xFF || strlen(letter) == 0x0 || strlen(letter) > 0x3) return SendClientMessage(playerid,0xFF0000,"Неверный ввод!Маска подсети:0-255.0-255"), false;
                if(
    IP[i] == 0x2Epoint true;
                else 
    point false;
            }
            else if((
    IP[i] == 0x2E && point) || (IP[i] == 0x2C && !point) || (IP[i] == EOS && !point)) return SendClientMessage(playerid,0xFF0000,"Неверный ввод!Пишите подсети через запятую, без использования пробелов! Максимум 3 подсети!"), false;
        }
        return 
    true;

    Ну, вроде все...

    Ничего не поняли выше? Скачайте готовый фс!
    Ссылка на фс: http://cruelgame.ru/fs/SubNetProject.rar
    пусто

  2. 1 пользователь сказал cпасибо Games за это полезное сообщение:

    Johann (12.06.2014)

  3. #2
    Активный пользователь Аватар для Динар
    Регистрация
    14.05.2011
    Адрес
    Уфа
    Возраст
    32
    Сообщений
    1,146
    Репутация: 69

    Звание: скоро придёт к известности

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    Блин ну круто чо...

  4. #3
    Активный пользователь Аватар для FreesK
    Регистрация
    10.03.2011
    Адрес
    Москва
    Сообщений
    115
    Репутация: 21

    Звание: на пути к лучшему

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    Отлично!) Молодец.

  5. #4
    Активный пользователь Аватар для Iceek
    Регистрация
    09.09.2011
    Адрес
    Казахстан.
    Сообщений
    679
    Репутация: 86

    Звание: скоро придёт к известности

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    интересная работа)
    ICQ: 624014893
    Skype: igor_iceek

  6. #5
    Активный пользователь
    Регистрация
    30.05.2011
    Адрес
    Россия
    Возраст
    29
    Сообщений
    102
    Репутация: 4

    Звание: пока не определено

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    Это конечно же всё очень круто,но не удобно для тех,кто любит играть в гостях

  7. #6
    SYSTEM Аватар для Games
    Регистрация
    28.06.2010
    Адрес
    Moscow
    Возраст
    30
    Сообщений
    1,468
    Репутация: 478

    Звание: - луч света в тёмном царстве

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    Всем спасибо..

    Цитата Сообщение от ИльяStap Посмотреть сообщение
    Это конечно же всё очень круто,но не удобно для тех,кто любит играть в гостях
    Ну, я ведь сделал поддержку до 3-ех подсетей) Что мешает заранее указать подсети?)
    Если не знаешь, то можно и вовсе временно отключить.
    пусто

  8. #7
    Пользователь
    Регистрация
    15.12.2011
    Адрес
    Ростов
    Возраст
    30
    Сообщений
    59
    Репутация: -1

    Звание: имеет немного плохого в прошлом

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    сделай fs если не затруднит)

  9. #8
    Пользователь
    Регистрация
    03.10.2011
    Адрес
    Россия
    Сообщений
    20
    Репутация: 1

    Звание: пока не определено

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    да, в виде fs бы не помешало

  10. #9
    boost::this_thread Аватар для Владокс
    Регистрация
    27.06.2010
    Адрес
    Екатеринбург
    Сообщений
    1,419
    Репутация: 225

    Звание: - весьма и весьма положительная личность

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    for(new i, oldpos; i <= strlen(IP); i++)
    ИГОРЬ МЫ ТЕБЯ ТЕРЯЕМ
    PHP код:
    for(new ioldposIP[i] != 0x0i++) 




    Связь со мной:
    Skype: bjiadokc | ICQ: 5462016 | Mail: [email protected]

    [1:03:15 | Изменены 1:03:25] SDraw: есть идеи блокнуть установщику сцампа доступ к системной папке?
    [1:03:45 | Изменены 1:03:51] SDraw: а то эта падла файлы directx заменяет внаглую
    [1:08:38] Vladislav Barabash: поставь файлы директа в ридонли
    [1:09:14] Vladislav Barabash: chmod r-x d3*.dll

  11. #10
    SYSTEM Аватар для Games
    Регистрация
    28.06.2010
    Адрес
    Moscow
    Возраст
    30
    Сообщений
    1,468
    Репутация: 478

    Звание: - луч света в тёмном царстве

    Re: Access from subnets (Доступ к авторизации только указанным подсетям)

    Да какая разница) Хотя да, так лучше)
    пусто

Страница 1 из 2 12 ПоследняяПоследняя

Похожие темы

  1. доступ к ftp
    от worldofgames в разделе Вопросы по скриптингу
    Ответов: 0
    Последнее сообщение: 09.08.2011, 20:48
  2. Телепорт по указанным координатам
    от z1mbo в разделе Вопросы по скриптингу
    Ответов: 6
    Последнее сообщение: 08.06.2011, 19:04
  3. Доступ на сайте
    от Burzum в разделе Другие темы по Pawn
    Ответов: 3
    Последнее сообщение: 13.05.2011, 21:30
  4. Как ограничить доступ к команде?
    от halliluya в разделе Вопросы по скриптингу
    Ответов: 2
    Последнее сообщение: 22.01.2011, 18:54
  5. Ответов: 5
    Последнее сообщение: 04.07.2010, 12:24

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •