Просмотр полной версии : [Мануал] Античит на Flood Incomming Connection
Valera_Trefilov
15.11.2014, 22:12
К переменным.
new jf_ip [MAX_PLAYERS] [64];
new jf_count [MAX_PLAYERS];
в public OnIncomingConnection(playerid, ip_address[], port)
for (new i = 0; i != MAX_PLAYERS; i++)
{
if(!strcmp(jf_ip[i], ip_address,true))
{
jf_count[i]++;
if (jf_count[i] > 2)
{
new jf_ban [64];
BlockIpAddress(ip_address,60*1000*5);
format(jf_ban, sizeof(jf_ban), "banip %s", ip_address);
SendRconCommand(jf_ban);
strmid (jf_ip[i], "NONE", 0, strlen ("NONE"), 5);
}
break;
}
else
{
strmid (jf_ip[i], ip_address, 0, strlen (ip_address), 32);
break;
}
}
в public OnGameModeInit()
for (new i = 0; i != MAX_PLAYERS; i++)
{
strmid ( jf_ip[i], "NONE", 0, strlen ("NONE"), 5);
jf_count[i] = 0;
}
SetTimer("JF_TIMER", 5*1000, true);
В конец мода
forward JF_TIMER();
public JF_TIMER()
{
for (new i = 0; i != MAX_PLAYERS; i++)
{
if(strcmp(jf_ip[i], "NONE", true))
{
new jf_ban [64];
format(jf_ban, sizeof(jf_ban), "unbanip %s", jf_ip[i]);
SendRconCommand(jf_ban);
break;
}
strmid (jf_ip[i], "NONE", 0, strlen ("NONE"), 5);
}
return 1;
}
Dima_Tushin
15.11.2014, 22:37
это типо флуд connectами?
James_Cruise
16.11.2014, 00:05
Много у тебя заморочек,мой вариант куда лучше. Писал в браузерной строке,теоретически всё на ходу.
new Flood_ip[1000][20],Flood_time[1000];
public OnIncomingConnection(playerid, ip_address[], port)
{
if(!strcmp(ip_address, Flood_ip[playerid], true, 20))
{
if(GetTickCount() - Flood_time[playerid] < 1000)
{
BlockIpAddress(ip_address, 60 * 1000);
}
}
Flood_time[playerid] = GetTickCount();
Flood_ip[playerid] = ip_address;
return 1;
}
Seregamil
16.11.2014, 09:48
Вы оба в википедию вообще заходили? Первый 64 ячейки под айпи берет, второй 20, еще и массив огромный создает...
James_Cruise
16.11.2014, 21:24
Вы оба в википедию вообще заходили? Первый 64 ячейки под айпи берет, второй 20, еще и массив огромный создает...
Я алгоритм дал,там уже сам подкорректируй выделение памяти.
Мой косяк,для IP хватает 16 ячеек.
Я алгоритм дал,там уже сам подкорректируй выделение памяти.
Только если будете создавать мануалы, уроки и т.д. на данном портале, обязательно прочтите это (http://pro-pawn.ru/showthread.php?8356).
А теперь после того, как прочитали ( или всё-таки нет? ):
5. Следите за качеством своего кода. Если Вы думаете, что "кому надо, тот сам доделает" - можете не рассчитывать на одобрение своей работы. Такие темы обычно ждёт удаление.
Вам будет дано 2 недели на улучшение качества Вашей работы. По истечению этого времени, если в работе не будет значимых изменений, она будет удалена.
Возьмите на заметку как вы ( в малой степени ), так и топикстартер ( Valera_Trefilov ).
James_Cruise
18.11.2014, 23:46
Только если будете создавать мануалы, уроки и т.д. на данном портале, обязательно прочтите это (http://pro-pawn.ru/showthread.php?8356).
А теперь после того, как прочитали ( или всё-таки нет? ):
Возьмите на заметку как вы ( в малой степени ), так и топикстартер ( Valera_Trefilov ).
Извиняюсь за малое недоразумение, код поправил.
new Flood_ip[MAX_PLAYERS][16],Flood_time[MAX_PLAYERS];
public OnIncomingConnection(playerid, ip_address[], port)
{
if(!strcmp(ip_address, Flood_ip[playerid], true, 16))
{
if(GetTickCount() - Flood_time[playerid] < 1000)
{
BlockIpAddress(ip_address, 60 * 1000);
}
}
Flood_time[playerid] = GetTickCount();
Flood_ip[playerid] = ip_address;
return 1;
}
Извиняюсь за малое недоразумение, код поправил.
new Flood_ip[MAX_PLAYERS][16],Flood_time[MAX_PLAYERS];
public OnIncomingConnection(playerid, ip_address[], port)
{
if(!strcmp(ip_address, Flood_ip[playerid], true, 16))
{
if(GetTickCount() - Flood_time[playerid] < 1000)
{
BlockIpAddress(ip_address, 60 * 1000);
}
}
Flood_time[playerid] = GetTickCount();
Flood_ip[playerid] = ip_address;
return 1;
}
C:\Users\LUI\Desktop\[SRP-Ua]\Full-GameRP\gamemodes\02\edit.pwn(31740) : error 017: undefined symbol "BlockIpAddress"
C:\Users\LUI\Desktop\[bSRP-Uab]\Full-GameRP\gamemodes\02\edit.pwn(31744) : error 047: array sizes do not match, or destination array is too small
Правельнее:
К переменным:
new Flood_ip[MAX_PLAYERS][16],Flood_time[MAX_PLAYERS];
В конец мода:
stock OnIncomingConnection(playerid, ip_address[], port)
{
if(!strcmp(ip_address, Flood_ip[playerid], true, 16))
{
if(GetTickCount() - Flood_time[playerid] < 1000)
{
BlockIpAddress(ip_address, 60 * 1000);
}
}
Flood_time[playerid] = GetTickCount();
Flood_ip[playerid] = ip_address;
return 1;
}
#Gabriel
05.12.2014, 13:12
Извиняюсь за малое недоразумение, код поправил.
new Flood_ip[MAX_PLAYERS][16],Flood_time[MAX_PLAYERS];
public OnIncomingConnection(playerid, ip_address[], port)
{
if(!strcmp(ip_address, Flood_ip[playerid], true, 16))
{
if(GetTickCount() - Flood_time[playerid] < 1000)
{
BlockIpAddress(ip_address, 60 * 1000);
}
}
Flood_time[playerid] = GetTickCount();
Flood_ip[playerid] = ip_address;
return 1;
}
Судя по коду, думаю у многих будет ошибка на
Flood_ip[playerid] = ip_address;
Все таки стоит повторно пересмотреть свой скрипт.
P.S В вашем коде несовпадение массивов.
- - - Добавлено - - -
C:\Users\LUI\Desktop\[SRP-Ua]\Full-GameRP\gamemodes\02\edit.pwn(31740) : error 017: undefined symbol "BlockIpAddress"
C:\Users\LUI\Desktop\[bSRP-Uab]\Full-GameRP\gamemodes\02\edit.pwn(31744) : error 047: array sizes do not match, or destination array is too small
Правельнее:
К переменным:
new Flood_ip[MAX_PLAYERS][16],Flood_time[MAX_PLAYERS];
В конец мода:
stock OnIncomingConnection(playerid, ip_address[], port)
{
if(!strcmp(ip_address, Flood_ip[playerid], true, 16))
{
if(GetTickCount() - Flood_time[playerid] < 1000)
{
BlockIpAddress(ip_address, 60 * 1000);
}
}
Flood_time[playerid] = GetTickCount();
Flood_ip[playerid] = ip_address;
return 1;
}
Что за бред? Вы вообще WIKI смотрите?
Зачем стандартный public реализовывать как stock?:shock:
Это не правильно.
Судя по коду, думаю у многих будет ошибка на
Flood_ip[playerid] = ip_address;
Все таки стоит повторно пересмотреть свой скрипт.
P.S В вашем коде несовпадение массивов.
- - - Добавлено - - -
Что за бред? Вы вообще WIKI смотрите?
Зачем стандартный public реализовывать как stock?:shock:
Это не правильно.
Я вроде кинул ошибки -_-
#Gabriel
05.12.2014, 19:09
Я вроде кинул ошибки -_-
Вы идиот что ли?
Ошибки я и сам вижу.
Я говорю что за быдло кодер который берет и меняет стандартную функцию на stock, которая будет работать как не стандартная и ИМЕННО поэтому компилятор не показывает ошибки. Задействуйте где нибудь свой stock - и будет Вам та же ошибка. О боже...
Вы идиот что ли?
Ошибки я и сам вижу.
Я говорю что за быдло кодер который берет и меняет стандартную функцию на stock, которая будет работать как не стандартная и ИМЕННО поэтому компилятор не показывает ошибки. Задействуйте где нибудь свой stock - и будет Вам та же ошибка. О боже...
Всё я вас понял, все ошибки исправил. Калбек вернул.
Извеняюсь за чушь
#Gabriel
06.12.2014, 15:08
Всё я вас понял, все ошибки исправил. Калбек вернул.
Извеняюсь за чушь
Не наблюдаю Ваших исправлений.
public OnIncomingConnection(playerid, ip_address[], port)
{
new Flood_ip [ MAX_PLAYERS ][ 16 ], Flood_time [ MAX_PLAYERS ] ;
if( !strcmp ( ip_address, Flood_ip [ playerid ], true, 16 ) )
{
if( GetTickCount ( ) - Flood_time [ playerid ] < 1000 )
{
BlockIpAddress ( ip_address, 60 * 1000 );
}
}
Flood_time [ playerid ] = GetTickCount ( ) ;
return 1;
}
Вот так не будет ошибок...
- - - Добавлено - - -
Вообще предоставлю ещё свой вариант: Pro-Pawn (http://pro-pawn.ru/showthread.php?11070-Anti-Flood-Incoming-connection)
#Gabriel
06.12.2014, 15:33
public OnIncomingConnection(playerid, ip_address[], port)
{
new Flood_ip [ MAX_PLAYERS ][ 16 ], Flood_time [ MAX_PLAYERS ] ;
if( !strcmp ( ip_address, Flood_ip [ playerid ], true, 16 ) )
{
if( GetTickCount ( ) - Flood_time [ playerid ] < 1000 )
{
BlockIpAddress ( ip_address, 60 * 1000 );
}
}
Flood_time [ playerid ] = GetTickCount ( ) ;
return 1;
}
Вот так не будет ошибок...
- - - Добавлено - - -
Вообще предоставлю ещё свой вариант: Pro-Pawn (http://pro-pawn.ru/showthread.php?11070-Anti-Flood-Incoming-connection)
Ваш вариант исключительно защитит от флуда в onplayerconnect.
- - - Добавлено - - -
public OnIncomingConnection(playerid, ip_address[], port)
{
new Flood_ip [ MAX_PLAYERS ][ 16 ], Flood_time [ MAX_PLAYERS ] ;
if( !strcmp ( ip_address, Flood_ip [ playerid ], true, 16 ) )
{
if( GetTickCount ( ) - Flood_time [ playerid ] < 1000 )
{
BlockIpAddress ( ip_address, 60 * 1000 );
}
}
Flood_time [ playerid ] = GetTickCount ( ) ;
return 1;
}
Вот так не будет ошибок...
- - - Добавлено - - -
Вообще предоставлю ещё свой вариант: Pro-Pawn (http://pro-pawn.ru/showthread.php?11070-Anti-Flood-Incoming-connection)
Ошибки все равно будут. Но другие.
Ваш вариант исключительно защитит от флуда в onplayerconnect.
- - - Добавлено - - -
Ошибки все равно будут. Но другие.
На врятли, пока работает без ошибок... Ложные так же не замечены..
Valera_Trefilov
12.12.2014, 17:56
Бред банить. Надо в плагине писать !
Прошу модераторов закрыть данную тему.
Бред банить. Надо в плагине писать !
Прошу модераторов закрыть данную тему.
Поддержу. Или также хостинги Игрохост и Ru-hoster предоставляют защиту от данной DoS атаки.
Salvacore
13.01.2015, 13:39
Калозид.
Пусть пока посмотрят на этот кошмар, переносить не буду 24 часа.
Powered by vBulletin® Version 4.2.0 Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot