Защита IP игрока паролем

will_rock

Участник
Сообщения
1,074
Реакции
363
Всем привет, здравствуйте все

Есть 2 игрока, первый нормальный игрок, второй подруб. Так вот при бане за читы второго, первый так же висит в бане, так как у меня стоит плагин блокировки по stean_id если был сменен ip и наоборот (этот крч [CS: Source] - SourceSleuth 1.4.0)

Так вот, быть может есть вариант поставить пароль на вход с конкретного ip? Как это сделано в плагинах по защите steam_id. Потому что запрещать игpoкaм игpaть нa cepвepe c oднoгo ip aдрeca как-то не комильфо.

Игра: css v34
 

Ice_Sochi

Участник
Сообщения
713
Реакции
416
Как вариант выдать пустую админку по айпи с паролем
 

StormX

Участник
Сообщения
902
Реакции
309
А каким образом можно дать админку по ip + pass чтобы при этом не пропускало на сервер

А почему для таких целей не использовать тот самый admins_simple .
"ip" "флаг:иммунитет(можно просто флаг)" "пароль"
Но это в том случае если у него Статический ip, а не динамический.
 

will_rock

Участник
Сообщения
1,074
Реакции
363
Сообщить пароль "нормальному" игроку, а второго не пустит
А почему для таких целей не использовать тот самый admins_simple .
"ip" "флаг:иммунитет(можно просто флаг)" "пароль"
Но это в том случае если у него Статический ip, а не динамический.

Его на сервер впустит и админка будет у того у кого есть пароль. А мне нужно, чтобы его именно не пропускало на сервер, как это делает плагин steamid protect
 

Ice_Sochi

Участник
Сообщения
713
Реакции
416
Флуд/Оффтоп
Его на сервер впустит и админка будет у того у кого есть пароль. А мне нужно, чтобы его именно не пропускало на сервер, как это делает плагин steamid protect
Оффтоп
 

will_rock

Участник
Сообщения
1,074
Реакции
363
admins.cfg
PHP:
Admins
{
    "BAILOPAN"
    {
        "auth"            "ip"
        "identity"        "x.x.x.x"
        "password"        "pass_value"
    }
}

core.cfg
PHP:
"PassInfoVar"            "_pass_rename"

console
PHP:
setinfo _pass_rename pass_value
Ну не работает это! Ты можешь сам проверить... Только на в34 проверяй, на ксс может это и работает.
--- Добавлено позже ---
Все что вы советуете я и сам проверял в первую очередь)
 

Kruzya

Участник
Сообщения
12,970
Реакции
10,927
  • Команда форума
  • #11
@will_rock, @Ice_Sochi, чтобы не пускало, необходимо явно сказать это Сурсмоду. Я где-то в конфигах это видел, но уже не вспомню. Поищите внимательнее.
 

DarklSide

Участник
Сообщения
931
Реакции
468
Ну не работает это
Скорей всего, если есть совпадение ip и пароля, будет выдаватся админ права.
Если идентификация "auth" "name" по его нику, только тогда будет "кик" при не совпадении пароля. Как и в admin-sql-prefetch.smx или admin-sql-threaded.smx.

чтобы его именно не пропускало на сервер, как это делает плагин steamid protect

PHP:
// закомментируй
// GetClientAuthString(client,auth,sizeof(auth));

// замена
if (KvJumpToKey(db,auth,false))
->
if (((GetClientAuthString(client, auth, sizeof(auth))) && (KvJumpToKey(db, auth, false))) || ((GetClientIP(client, auth, sizeof(auth))) && (KvJumpToKey(db, auth, false))))


// если предупреждение - warning 234: symbol "GetClientAuthString" is marked as deprecated: Use GetClientAuthId
// можно в начале заменить на
if (((GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth.......  // и все остальное


steamprotect.txt
PHP:
"STEAM_0:0:01"
{
    "login" "login_value"
    "password" "pass_value"
}
"x.x.x.x"
{
    "login" "login_value_s"
    "password" "pass_value_s"
}
 
Последнее редактирование:

will_rock

Участник
Сообщения
1,074
Реакции
363
Скорей всего, если есть совпадение ip и пароля, будет выдаватся админ права.
Если идентификация "auth" "name" по его нику, только тогда будет "кик" при не совпадении пароля. Как и в admin-sql-prefetch.smx или admin-sql-threaded.smx.



PHP:
// закомментируй
// GetClientAuthString(client,auth,sizeof(auth));

// замена
if (KvJumpToKey(db,auth,false))
->
if (((GetClientAuthString(client, auth, sizeof(auth))) && (KvJumpToKey(db, auth, false))) || ((GetClientIP(client, auth, sizeof(auth))) && (KvJumpToKey(db, auth, false))))


// если предупреждение - warning 234: symbol "GetClientAuthString" is marked as deprecated: Use GetClientAuthId
// можно в начале заменить на
if (((GetClientAuthId(client, AuthId_Steam2, auth, sizeof(auth.......  // и все остальное


steamprotect.txt
PHP:
"STEAM_0:0:01"
{
    "login" "login_value"
    "password" "pass_value"
}
"x.x.x.x"
{
    "login" "login_value_s"
    "password" "pass_value_s"
}
Спасибо, но это так же не работает. Плагин скомпилировался без ошибок, но почему-то не сервер пропускает без ввода пароля
 

DarklSide

Участник
Сообщения
931
Реакции
468
но почему-то не сервер пропускает без ввода пароля

steamprotect.txt должен быть по прошлому аналогу, т.е. раздел "steamprotect":
PHP:
"steamprotect"
{
    // ...
    "STEAM_0:0:01"
    {
        "login" "login_value"
        "password" "pass_value"
    }
    "x.x.x.x"
    {
        "login" "login_value_s"
        "password" "pass_value_s"
    }
    // ...
}

Так же посмотрите чтобы у проверяющего небыло своего steamid в txt, т.к. если найдет по steamid и будет правельный пароль, то дальнейший поиск по ip не будет [например, может быть, в вашем случае пускает на сервер].

P.S.: проверьте со своим ip,
если опять тоже самое, скиньте sp и txt.
 
Последнее редактирование:

will_rock

Участник
Сообщения
1,074
Реакции
363
steamprotect.txt должен быть по прошлому аналогу, т.е. раздел "steamprotect":
PHP:
"steamprotect"
{
    // ...
    "STEAM_0:0:01"
    {
        "login" "login_value"
        "password" "pass_value"
    }
    "x.x.x.x"
    {
        "login" "login_value_s"
        "password" "pass_value_s"
    }
    // ...
}

Так же посмотрите чтобы у проверяющего небыло своего steamid в txt, т.к. если найдет по steamid и будет правельный пароль, то дальнейший поиск по ip не будет [например, может быть, в вашем случае пускает на сервер].

P.S.: проверьте со своим ip,
если опять тоже самое, скиньте sp и txt.
#include <sourcemod>


public Plugin:myinfo =
{
name = "SteamId Protect",
author = "Andruum",
description = "Protect SteamId on nosteam servers",
version = "1.10",
url = ""
};

public OnPluginStart()
{
RegServerCmd("sp_add",cmdcallbackadd);
RegServerCmd("sp_del",cmdcallbackdel);
new Handle:db = CreateKeyValues("steamprotect");
KvJumpToKey(db,"Steam",true);
KvSetString(db,"login","login");
KvSetString(db,"password","Password");
KvRewind(db);
if (!FileToKeyValues(db,"cfg/steamprotect.txt"))
{
KeyValuesToFile(db,"cfg/steamprotect.txt");
}
CloseHandle(db);
}

public OnClientPutInServer(client)
{
new String:auth[30];
//GetClientAuthString(client,auth,sizeof(auth));
new Handle:db = CreateKeyValues("steamprotect");
FileToKeyValues(db,"cfg/steamprotect.txt");
if (((GetClientAuthString(client, auth, sizeof(auth))) && (KvJumpToKey(db, auth, false))) || ((GetClientIP(client, auth, sizeof(auth))) && (KvJumpToKey(db, auth, false))))
{
new String:login[30];
KvGetString(db,"login",login,sizeof(login));
new String:password[30];
KvGetString(db,"password",password,sizeof(password));
new String:userpassword[30];
GetClientInfo(client,login,userpassword,sizeof(userpassword));
if (!StrEqual(password,userpassword,false))
{
KickClient(client,"Вы пытались зайти с чужим SteamId");
new String:name[50];
GetClientName(client,name,sizeof(name));
PrintToChatAll("%s пытался зайти с чужим SteamId",name);
PrintToServer("%s %s bad login",name,auth);
}
}
CloseHandle(db);
}

public Action:cmdcallbackadd(args)
{
if (args < 3)
{
PrintToServer("Usage : sp_add '<steamid>' '<login>' '<password>'");
return Plugin_Handled;
}
new Handle:db = CreateKeyValues("steamprotect");
FileToKeyValues(db,"cfg/steamprotect.txt")
new String:auth[50];
new String:log[50];
new String:pass[50];
GetCmdArg(1,auth,sizeof(auth));
GetCmdArg(2,log,sizeof(log));
GetCmdArg(3,pass,sizeof(pass));
KvJumpToKey(db,auth,true);
KvSetString(db,"login",log);
KvSetString(db,"password",pass);
PrintToServer("For steam %s set password %s and login %s",auth,pass,log);
KvRewind(db);
KeyValuesToFile(db,"cfg/steamprotect.txt");
CloseHandle(db);
return Plugin_Continue;
}

public Action:cmdcallbackdel(args)
{
if (args != 1)
{
PrintToServer("Usage : sp_del '<steamid>>'");
return Plugin_Handled;
}
new Handle:db = CreateKeyValues("steamprotect");
FileToKeyValues(db,"cfg/steamprotect.txt");
new String:auth[50];
GetCmdArg(1,auth,sizeof(auth));
KvJumpToKey(db,auth,false);
if (KvDeleteThis(db))
{
PrintToServer("For steam %s removed protect",auth);
KvRewind(db);
KeyValuesToFile(db,"cfg/steamprotect.txt");
}
else
{
PrintToServer("Steam %s not exists",auth);
}
CloseHandle(db);
return Plugin_Continue;
}

"steamprotect"
{
"ip"
{
"login" "login"
"password" "Password"
}
"1.3.3.7"
{
"login" "Player"
"password" "qwerty"
}
}
 

DarklSide

Участник
Сообщения
931
Реакции
468
Проверено на домашнем по данным исходнику и конфигу:

localip.PNG

Пускает на сервер только после ввода правильного login и password - [setinfo "Player" "qwerty"].

ip конечно в данном случае брался локальный. И в конфиг где "1.3.3.7".

os win->cmd->ipconfig,
os lin->ifconfig.
либо чтобы наверняка:
Перед проверкой "if (((", вставить выше:
PHP:
GetClientIP(client, auth, sizeof(auth));
LogMessage("GetClientIP = [%s]", auth);
запись в лог после подключения [x.x.x.x].


P.S.:
Оффтоп

PHP:
"steamprotect"
{
    "192.168.0.2"
    {
        "login" "Player"
        "password" "qwerty"
    }
}
ниже является примером правильного написания, созданым плагином, если файла по пути cfg/steamprotect.txt не существует и поэтому может быть удалено.
PHP:
    "ip" // или "Steam"
    {
        "login" "login"
        "password" "Password"
    }

Если случай с "localip" не ваш, и проверяете на не домашнем сервере, возможно допустили банальную ошибку, например кодировка конфига [поставить вручную на utf-8 без BOM или например удалить по пути "cfg/steamprotect.txt", перезапустить сервер и ввести команду которая подойдет и для "ip": sp_add "x.x.x.x" "Player" "qwerty"], и т.д.
 

will_rock

Участник
Сообщения
1,074
Реакции
363
Проверено на домашнем по данным исходнику и конфигу:


Пускает на сервер только после ввода правильного login и password - [setinfo "Player" "qwerty"].

ip конечно в данном случае брался локальный. И в конфиг где "1.3.3.7".

os win->cmd->ipconfig,
os lin->ifconfig.
либо чтобы наверняка:
Перед проверкой "if (((", вставить выше:
PHP:
GetClientIP(client, auth, sizeof(auth));
LogMessage("GetClientIP = [%s]", auth);
запись в лог после подключения [x.x.x.x].


P.S.:
Оффтоп

PHP:
"steamprotect"
{
    "192.168.0.2"
    {
        "login" "Player"
        "password" "qwerty"
    }
}
ниже является примером правильного написания, созданым плагином, если файла по пути cfg/steamprotect.txt не существует и поэтому может быть удалено.
PHP:
    "ip" // или "Steam"
    {
        "login" "login"
        "password" "Password"
    }

Если случай с "localip" не ваш, и проверяете на не домашнем сервере, возможно допустили банальную ошибку, например кодировка конфига [поставить вручную на utf-8 без BOM или например удалить по пути "cfg/steamprotect.txt", перезапустить сервер и ввести команду которая подойдет и для "ip": sp_add "x.x.x.x" "Player" "qwerty"], и т.д.
Всё, спасибо большое) Видимо я при добавлении что-то не так сделал. Добавил через ркон и всё гуд
 
Сверху Снизу