PDA

Просмотр полной версии : [Мануал] Античит на 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 ячеек.

L0ndl3m
18.11.2014, 21:58
Я алгоритм дал,там уже сам подкорректируй выделение памяти.

Только если будете создавать мануалы, уроки и т.д. на данном портале, обязательно прочтите это (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;
}

Brendan
04.12.2014, 19:09
Извиняюсь за малое недоразумение, код поправил.


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;
}

MΛRŠ
04.12.2014, 20:38
не работает

#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:
Это не правильно.

Brendan
05.12.2014, 18:40
Судя по коду, думаю у многих будет ошибка на

Flood_ip[playerid] = ip_address;
Все таки стоит повторно пересмотреть свой скрипт.
P.S В вашем коде несовпадение массивов.

- - - Добавлено - - -



Что за бред? Вы вообще WIKI смотрите?
Зачем стандартный public реализовывать как stock?:shock:
Это не правильно.

Я вроде кинул ошибки -_-

#Gabriel
05.12.2014, 19:09
Я вроде кинул ошибки -_-

Вы идиот что ли?
Ошибки я и сам вижу.
Я говорю что за быдло кодер который берет и меняет стандартную функцию на stock, которая будет работать как не стандартная и ИМЕННО поэтому компилятор не показывает ошибки. Задействуйте где нибудь свой stock - и будет Вам та же ошибка. О боже...

Brendan
06.12.2014, 14:19
Вы идиот что ли?
Ошибки я и сам вижу.
Я говорю что за быдло кодер который берет и меняет стандартную функцию на stock, которая будет работать как не стандартная и ИМЕННО поэтому компилятор не показывает ошибки. Задействуйте где нибудь свой stock - и будет Вам та же ошибка. О боже...

Всё я вас понял, все ошибки исправил. Калбек вернул.
Извеняюсь за чушь

#Gabriel
06.12.2014, 15:08
Всё я вас понял, все ошибки исправил. Калбек вернул.
Извеняюсь за чушь

Не наблюдаю Ваших исправлений.

Brendan
06.12.2014, 15:24
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)

Ошибки все равно будут. Но другие.

Brendan
06.12.2014, 21:12
Ваш вариант исключительно защитит от флуда в onplayerconnect.

- - - Добавлено - - -



Ошибки все равно будут. Но другие.

На врятли, пока работает без ошибок... Ложные так же не замечены..

Valera_Trefilov
12.12.2014, 17:56
Бред банить. Надо в плагине писать !



Прошу модераторов закрыть данную тему.

Brendan
12.12.2014, 18:48
Бред банить. Надо в плагине писать !



Прошу модераторов закрыть данную тему.

Поддержу. Или также хостинги Игрохост и Ru-hoster предоставляют защиту от данной DoS атаки.

Salvacore
13.01.2015, 13:39
Калозид.
Пусть пока посмотрят на этот кошмар, переносить не буду 24 часа.