[SOURCEPAWN] ПРИВЯЗКА

Тема в разделе "Программирование / Скриптинг", создана пользователем Hejter, 24 ноя 2013.

  1. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Скрипты для привязки плагинов по IP : PORT

    Первый и самый простой способ:Получаем ip серверной переменной hostip

    PHP:
    #include <sourcemod>
     
    new String:g_sServerIp[16],
     
    String:g_sServerPort[8];
     
    public 
    OnPluginStart()
    {
     new 
    iIp GetConVarInt(FindConVar("hostip"));
     
    GetConVarString(FindConVar("hostport"), g_sServerPortsizeof(g_sServerPort));
     
    Format(g_sServerIpsizeof(g_sServerIp), "%i.%i.%i.%i", (iIp >> 24) & 0x000000FF, (iIp >> 16) & 0x000000FF, (iIp >>  8) & 0x000000FFiIp 0x000000FF);
    }
     
    public 
    OnConfigsExecuted()
    {
     
    PrintToServer("ip = %s, port = %s"g_sServerIpg_sServerPort);
    }
    </
    sourcemod>

    Данный способ не является универсальным, ведь значение переменной можно изменить.

    Второй способ, используя расширение steamtools.

    PHP:
    #include <sourcemod>
    #include <steamtools>
     
    new String:g_ServerPort[8],
     
    String:g_ServerIp[16];
     
    public 
    OnPluginStart()
    {
     
    GetConVarString(FindConVar("hostport"), g_ServerPortsizeof(g_ServerPort));
    }
     
    public 
    OnConfigsExecuted()
    {
     new 
    octets[4];
      
     
    Steam_GetPublicIP(octets);
     
    Format(g_ServerIp16"%d.%d.%d.%d"octets[0], octets[1], octets[2], octets[3]);
     
    PrintToServer("ip = %s, port = %s"g_ServerIpg_ServerPort);
    }</
    steamtools></sourcemod>

    Мы получим значение ip, которое вернет нам steam.

    Ну и третий способ, используя php скрипт, tcp соединение и базу MySQL. Для этого нам понадобится расширение socket.

    PHP:
    #pragma semicolon 1
     
    #include <sourcemod>
    #include <socket>
     
    #define PLUGIN_VERSION  "0.0.1"
    #define PLUGIN_NAME  "Protect"
     
    #define SITE    "Ваш сайт"
    #define PHP    "protect.php" //Путь до скрипта
    #define PHP_GET   "port" // Имя get переменной
     
    #define DEBUG
     
    public Plugin:myinfo 
    {
     
    name PLUGIN_NAME,
     
    author "duxa",
     
    description "",
     
    version PLUGIN_VERSION,
     
    url ""
    }
     
    public 
    OnPluginStart()
    {
     new 
    Handle:socket SocketCreate(SOCKET_TCPOnSocketError);
     
    SocketConnect(socketOnSocketConnectedOnSocketReceiveOnSocketDisconnectedSITE80);
    }
     
    public 
    OnSocketConnected(Handle:socketany:arg
    {
     new 
    String:szServerPort[8],
      
    String:szRequest[128];
      
     
    GetConVarString(FindConVar("hostport"), szServerPortsizeof(szServerPort));
     
    Format(szRequestsizeof(szRequest), "GET /%s?%s=%s HTTP/1.0\r\nHost: %s\r\nConnection: close\r\n\r\n"PHPPHP_GETszServerPortSITE);
     
    SocketSend(socketszRequest);
    }
     
    public 
    OnSocketReceive(Handle:socketString:receiveData[], const dataSizeany:arg
    {
     
    decl String:szTheContent[1024],
        
    String:szTheNew[1024];
      
     if(
    dataSize 0)
        {
      
    strcopy(szTheContentsizeof(szTheContent), receiveData);
         
      
    SplitString(szTheContent"\r\n\r\n"szTheNewsizeof(szTheNew));
      
    ReplaceString(szTheContentsizeof(szTheContent), szTheNew"");
       
      if(
    StrEqual(szTheContent"\r\n\r\ntrue"false)) //CraZy
      
    {
       
    PrintToServer("[%s] Access is allowed!"PLUGIN_NAME);
      } else
      {
       
    PrintToServer("[%s] Access denied! Contact the author."PLUGIN_NAME);
      }
     }
    }
     
    public 
    OnSocketDisconnected(Handle:socketany:arg
    {
     
    CloseHandle(socket);
     
    #if defined DEBUG
     
    PrintToServer("[%s] Socket Disconnected"PLUGIN_NAME);
     
    #endif
    }
     
    public 
    OnSocketError(Handle:socket, const errorType, const errorNumany:arg
    {
     
    PrintToServer("[%s] Socket error %d (errno %d)"PLUGIN_NAMEerrorTypeerrorNum);
     
    LogError("[%s] Socket error %d (errno %d)"PLUGIN_NAMEerrorTypeerrorNum);
     
    CloseHandle(socket);
    }</
    socket></sourcemod>

    Вот собственно и сам php скрипт (protect.php):
    От Автора: *Могут быть погрешности, знания в php невелеки.

    PHP:
    <?php
    /* Настройки БД */
    $host  "Адрес"
    $user  "Логин"
    $pwd  "Пароль"
    /* Настройки БД */
     
    $ip_q  GetRealIp();
     
    function 
    GetRealIp()
    {
     if (!empty(
    $_SERVER['HTTP_CLIENT_IP'])) 
     {
      
    $ip $_SERVER['HTTP_CLIENT_IP'];
     } else
     if (!empty(
    $_SERVER['HTTP_X_FORWARDED_FOR']))
     {
      
    $ip $_SERVER['HTTP_X_FORWARDED_FOR'];
     } else
     {
      
    $ip $_SERVER['REMOTE_ADDR'];
     }
     return 
    $ip;
    }
     
    if (isset(
    $_GET['port']) && $_GET['port'] > 0)
    {
     
    $port=$_GET['port']; 
    } else
    {
     echo 
    "false";
     exit();
    }
     
    $db mysql_connect($host,$user,$pwd) or die("Failed to connect to MySQL.");
    mysql_select_db("protect",$db) or die("Failed to connect to MySQL.");
     
    $result mysql_query("SELECT * FROM Protect WHERE ip = '$ip_q' AND port = '$port'");
     
    if (
    mysql_num_rows($result)>0)
    {
     while (
    $row mysql_fetch_assoc($result)) echo "true";
    } else echo 
    "false";
     
    mysql_close();
    ?>

    Структура таблицы:

    PHP:
    CREATE TABLE IF NOT EXISTS `Protect` (
      `
    idint(4NOT NULL,
      `
    ipvarchar(16NOT NULL,
      `
    portint(6NOT NULL,
      
    PRIMARY KEY  (`id`)
    );
    При запуске плагина происходит обращение с передачей значения порта сервера (get запрос) и полученные айпи и порт сверяются с теми, что находятся в нашей базе.


    Оригинал

    Четвертый скрипт, то как я привязываю плагин.
    Привязывает плагин только по айпи (без порта).

    PHP:
    #include <sourcemod>

    public OnPluginStart()

        new 
    hostip GetConVarInt(FindConVar("hostip"));
        
    decl String:serverIP[32];
        
    FormatEx(serverIPsizeof(serverIP), "%u.%u.%u.%u", (hostip >> 24) & 0x000000FF, (hostip >> 16) & 0x000000FF, (hostip >> 8) & 0x000000FFhostip 0x000000FF);
        if(!
    StrEqual(serverIP"тут айпи адрес.")) // IP адресс вашего сервера
        
    {
            
    SetFailState("Плагин защищен :D");
        }

    }

    P.S. ниже прикрепил файлы.
     

    Вложения:

    Последнее редактирование модератором: 16 янв 2015
    Danyas, san911, R1KO и 6 другим нравится это.
  2. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Нахер это здесь, хочешь привязывать, пиши VSP, нехер нарушать GPL. Задолбали уже wS, FrozDark, и другие, которые не выкладывают исходники и в большинсте случаев хотят нагреть побольше бабла, а потом нихрена нельзя с этим зоопарком сделать. ИМХО, не место этому здесь.
     
    BatyaMedic, T1MOXA, Red4911 и 6 другим нравится это.
  3. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.971
    Симпатии:
    2.977
    Через неделю все школьники будут перепродавать свои приватные плагины уже с привязкой.
     
    BatyaMedic, hellgu и EPacker2 нравится это.
  4. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Не надо так злиться.
    Взял и репку мне снизил. Я что виноват что-ли, то что они не выкладывают исходники, авторство за ними и им решать что со своими плагинами делать.
    Хотят привязывают и продают, не все такие как ты, добрые.
     
  5. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.971
    Симпатии:
    2.977
    Hejter, за ними только авторство. Но лицензия языка, который они исользуют гласит о том, что они должды давать исходники.
     
    Лев и EPacker2 нравится это.
  6. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    Ты - нет. Но этой темой получается что ты поощряешь такую логику. А решать не им - почитай лицензию GPL, под которой распространяется SourceMod - производные продукты должны лицензироваться под той же лицензией, то есть тоже иметь открытый исходный код, а такие методы автоматически означают отсутствие исходников, и как следствие, нарушение лицензии SourceMod. И ладно пофиг на правовую часть, за этим следят только на AM, но это убивает саму суть - разнообразие серверов сводится на нет, т.к. все получается шаблонное, а если что-то хочешь сделать по-другому, то ты это уже не можешь сделать из-за того, что такие люди решили не выкладывать исходники, хотя должны были бы, и им лень добавлять твою идею в оригинал. А был бы исходник, ты возможно и сам смог бы это изменить.

    Когда понизил репу я, осталось 9, сейчас уже -4, значит так думаю не только я
     
    Red4911, EPacker2 и R1KO нравится это.
  7. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    lysis и нефиг этим школьникам делать будет

    Если подумать, сколько мы могли бы заработать с Vaio, продавая VIP System с привязкой к серверу и с аналогией на SB за полторы штуки от онотоле, скажем Vaio получал бы за вебморду (одну инсталляцию) 400, а я за инсталляцию плагина на 1 сервер скажем 50, то это уж не знаю сколько это бы получилось в итоге. Хотя с другой стороны, тогда бы смысла в этой системе не было, онотоле хороший пример - вспомните его комментарии после того, как кто-то сделал нуль.
     
  8. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Данную тему я не буду затирать, пусть решает администрация/модераторы.
    Не все живут по писанному закону.
     
  9. FrozDark

    FrozDark Команда сайта HLMod Модератор

    Сообщения:
    1.761
    Симпатии:
    1.915
    KorDen, начни бороться с верхушки нарушении лицензии - ОС.
     
  10. The Night Fury

    The Night Fury Администратор

    Сообщения:
    1.221
    Симпатии:
    914
    Ну началось...
    Будто что-то плохое — защитить плагин. Ну да, lysis, но и он не всегда спасает. Те, кто свои плагины сами и защитить не могут, тем и эта инструкция будет бесполезна, только код засрать.

    В случае с опытными — бесполезна снова. А так, на почитать, как для меня — вполне себе годно. Ведь, опять же, кому надо, тот раскомпилирует.
     
  11. KorDen

    KorDen Atra esterní ono thelduin! Ньюсмейкер

    Сообщения:
    2.194
    Симпатии:
    1.398
    FrozDark, Оффтоп
     
  12. djeck993

    djeck993

    Сообщения:
    40
    Симпатии:
    8
    Вашу "вип систему" врядли ктото бы купил. Такое некому ненужно и бесплатно не то что за деньги. СБ от онотоле намного лучше. А теперь можешь снизить репу.
     
  13. R1KO

    R1KO Супер-модератор

    Сообщения:
    5.971
    Симпатии:
    2.977
    djeck993, ну я такое сб даже если мне заплатят себе не поставлю.
     
    Danyas нравится это.
  14. SaInT.P

    SaInT.P

    Сообщения:
    1.270
    Симпатии:
    237
    Мне нужна будет та версия которая надеюсь скоро выйдет в свет,в ней будет гораздо больший функционал вроде как)
     
  15. Черная вдова

    Черная вдова

    Сообщения:
    1.621
    Симпатии:
    234
    djeck993,
    Оффтоп
     
  16. semjef

    semjef semjef.ru

    Сообщения:
    1.031
    Симпатии:
    473
    последняя привязка через сайт - бред, я её за 15 минут обойду немного поиграв с настройками hosts
     
  17. Hejter

    Hejter Mapper Source Engine

    Сообщения:
    1.771
    Симпатии:
    259
    Оффтоп
     
    Danyas нравится это.