[SOURCEPAWN] ПРИВЯЗКА

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Скрипты для привязки плагинов по 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_sServerPort, sizeof(g_sServerPort));
 Format(g_sServerIp, sizeof(g_sServerIp), "%i.%i.%i.%i", (iIp >> 24) & 0x000000FF, (iIp >> 16) & 0x000000FF, (iIp >>  8) & 0x000000FF, iIp & 0x000000FF);
}
 
public OnConfigsExecuted()
{
 PrintToServer("ip = %s, port = %s", g_sServerIp, g_sServerPort);
}
</sourcemod>

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

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

PHP:
#include <sourcemod>
#include <steamtools>
 
new String:g_ServerPort[8],
 String:g_ServerIp[16];
 
public OnPluginStart()
{
 GetConVarString(FindConVar("hostport"), g_ServerPort, sizeof(g_ServerPort));
}
 
public OnConfigsExecuted()
{
 new octets[4];
  
 Steam_GetPublicIP(octets);
 Format(g_ServerIp, 16, "%d.%d.%d.%d", octets[0], octets[1], octets[2], octets[3]);
 PrintToServer("ip = %s, port = %s", g_ServerIp, g_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_TCP, OnSocketError);
 SocketConnect(socket, OnSocketConnected, OnSocketReceive, OnSocketDisconnected, SITE, 80);
}
 
public OnSocketConnected(Handle:socket, any:arg) 
{
 new String:szServerPort[8],
  String:szRequest[128];
  
 GetConVarString(FindConVar("hostport"), szServerPort, sizeof(szServerPort));
 Format(szRequest, sizeof(szRequest), "GET /%s?%s=%s HTTP/1.0\r\nHost: %s\r\nConnection: close\r\n\r\n", PHP, PHP_GET, szServerPort, SITE);
 SocketSend(socket, szRequest);
}
 
public OnSocketReceive(Handle:socket, String:receiveData[], const dataSize, any:arg) 
{
 decl String:szTheContent[1024],
    String:szTheNew[1024];
  
 if(dataSize > 0)
    {
  strcopy(szTheContent, sizeof(szTheContent), receiveData);
     
  SplitString(szTheContent, "\r\n\r\n", szTheNew, sizeof(szTheNew));
  ReplaceString(szTheContent, sizeof(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:socket, any:arg) 
{
 CloseHandle(socket);
 #if defined DEBUG
 PrintToServer("[%s] Socket Disconnected", PLUGIN_NAME);
 #endif
}
 
public OnSocketError(Handle:socket, const errorType, const errorNum, any:arg) 
{
 PrintToServer("[%s] Socket error %d (errno %d)", PLUGIN_NAME, errorType, errorNum);
 LogError("[%s] Socket error %d (errno %d)", PLUGIN_NAME, errorType, errorNum);
 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` (
  `id` int(4) NOT NULL,
  `ip` varchar(16) NOT NULL,
  `port` int(6) NOT NULL,
  PRIMARY KEY  (`id`)
);

При запуске плагина происходит обращение с передачей значения порта сервера (get запрос) и полученные айпи и порт сверяются с теми, что находятся в нашей базе.


Оригинал

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

PHP:
#include <sourcemod>

public OnPluginStart()

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

}

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

Вложения

  • plugin_protected_1.sp
    0 байт · Просмотры: 112
  • plugin_protected_2.sp
    0 байт · Просмотры: 72
  • plugin_protected_3.sp
    0 байт · Просмотры: 109
  • sql+protect.rar
    0 байт · Просмотры: 160
Последнее редактирование модератором:

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Нахер это здесь, хочешь привязывать, пиши VSP, нехер нарушать GPL. Задолбали уже wS, FrozDark, и другие, которые не выкладывают исходники и в большинсте случаев хотят нагреть побольше бабла, а потом нихрена нельзя с этим зоопарком сделать. ИМХО, не место этому здесь.
 

Hejter

xor ebx, ebx
Сообщения
1,759
Реакции
393
Нахер это здесь, хочешь привязывать, пиши VSP, нехер нарушать GPL. Задолбали уже wS, FrozDark, и другие, которые не выкладывают исходники и в большинсте случаев хотят нагреть побольше бабла, а потом нихрена нельзя с этим зоопарком сделать. ИМХО, не место этому здесь.

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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #5
Hejter, за ними только авторство. Но лицензия языка, который они исользуют гласит о том, что они должды давать исходники.
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Я что виноват что-ли, то что они не выкладывают исходники, авторство за ними и им решать что со своими плагинами делать.
Хотят привязывают и продают, не все такие как ты, добрые.

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

Когда понизил репу я, осталось 9, сейчас уже -4, значит так думаю не только я
 

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
Через неделю все школьники будут перепродавать свои приватные плагины уже с привязкой.

lysis и нефиг этим школьникам делать будет

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

Hejter

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

Когда понизил репу я, осталось 9, сейчас уже -4, значит так думаю не только я

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

FrozDark

Участник
Сообщения
1,769
Реакции
2,050
KorDen, начни бороться с верхушки нарушении лицензии - ОС.
 

The Night Fury

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

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

KorDen

Atra esterní ono thelduin!
Сообщения
2,142
Реакции
1,424
FrozDark, Оффтоп
 

djeck993

Участник
Сообщения
40
Реакции
8
lysis и нефиг этим школьникам делать будет

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

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

R1KO

fuck society
Сообщения
9,457
Реакции
7,786
  • Команда форума
  • #13
djeck993, ну я такое сб даже если мне заплатят себе не поставлю.
 

SaInT.P

Участник
Сообщения
1,268
Реакции
226
Вашу "вип систему" врядли ктото бы купил. Такое некому ненужно и бесплатно не то что за деньги.
Мне нужна будет та версия которая надеюсь скоро выйдет в свет,в ней будет гораздо больший функционал вроде как)
 

Черная вдова

Участник
Сообщения
2,795
Реакции
670
djeck993,
Оффтоп
 

semjef

semjef.ru
Сообщения
993
Реакции
444
последняя привязка через сайт - бред, я её за 15 минут обойду немного поиграв с настройками hosts
 
Сверху Снизу