NetStats_MessagesReceived - краш сервера
#1

Добрый день!

Функция NetStats_MessagesReceived в односекундном таймере крашит сервер.
Крашы происходили и раньше (в 0.3x), когда приходилось парсить данные GetPlayerNetworkStats

Код:
pawn Code:
var = NetStats_MessagesReceived(i);
    if(var - MessagesCount[i] > 1000) {
        printf("playerid: %i, messagesReceived: %i messagesCount %i", i, var, MessagesCount[i]);
        Ban(i);
        continue;
    }
    else MessagesCount[i] = var;
[15/02/14 16:23:52] [debug] Server crashed while executing GameMode.amx
[15/02/14 16:23:52] [debug] AMX backtrace:
[15/02/14 16:23:52] [debug] #0 native NetStats_MessagesReceived () [080d9ec0] from samp03svr
[15/02/14 16:23:52] [debug] #1 000ebe50 in public TimerOneSecond () from GameMode.amx
[15/02/14 16:23:52] [debug] Native backtrace:
[15/02/14 16:23:52] [debug] #0 006d360b in _ZN10StackTraceC1EPv () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #1 006cae92 in _ZN11CrashDetect20PrintNativeBacktraceEPv () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #2 006cc8d9 in _ZN11CrashDetect11OnExceptionEPv () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #3 006d32a0 in ?? () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #4 00d8c410 in ?? ()
[15/02/14 16:23:52] [debug] #5 08082a46 in ?? () from ./samp03svr
[15/02/14 16:23:52] [debug] #6 0807e43c in ?? () from ./samp03svr
[15/02/14 16:23:52] [debug] #7 0806fd49 in ?? () from ./samp03svr
[15/02/14 16:23:52] [debug] #8 080d9f08 in ?? () from ./samp03svr
[15/02/14 16:23:52] [debug] #9 08093d84 in ?? () from ./samp03svr
[15/02/14 16:23:52] [debug] #10 006ca5fc in _ZN11CrashDetect13DoAmxCallbackEiPiS0_ () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #11 006cf15c in ?? () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #12 006d764d in amx_Exec () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #13 006ccabb in _ZN11CrashDetect9DoAmxExecEPii () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #14 006cf100 in ?? () from plugins/crashdetect.so
[15/02/14 16:23:52] [debug] #15 080e57a5 in ?? () from ./samp03svr
[15/02/14 16:23:52] [debug] #16 080acedb in ?? () from ./samp03svr
[15/02/14 16:23:52] [debug] #17 080a81ae in ?? () from ./samp03svr
[15/02/14 16:23:52] [debug] #18 001cece6 in __libc_start_main () from /lib/libc.so.6
[15/02/14 16:23:52] [debug] #19 0804b4a1 in ?? () from ./samp03svr
Reply
#2

Почему?
Reply
#3

Лучше об этом сообщить в иностранный раздел Bug reports
Reply
#4

пробуй проверять перед проверкой этим
NetStats_ConnectionStatus
Reply
#5

Подтверждаю
Вызывает краш также как и GetPlayerNetworkStats
Reply
#6

Это бывает рандомно или при какихто случаях ?
Reply
#7

Это рандомно и на столько редко что невозможно выяснить с чем это связано, т.е. раз в секунду на пару сотен человек она проверяется, и может раз в неделю только вызывать краш

т.к. ракнет идёт в отдельном потоке, то видимо это проблема многопоточности
отсутствие мьютексов все дела
Reply
#8

NetStats_ConnectionStatus
не поможет
Reply
#9

Я удалил функцию NetStats_MessagesReceived.

Теперь функция NetStats_BytesReceived вызывает аналогичную проблему


pawn Code:
for(new i, m = GetMaxPlayers(); i < m; i ++) {
        if(!IsPlayerConnected(i)) continue;

        f_var[1] = NetStats_BytesReceived(i);
        if(f_var[1] - BytesCount[i] > 7500) {
            Ban(i);
            continue;
        }
        else BytesCount[i] = f_var[1];
        ...
    }

[debug] Server crashed while executing GameMode.amx
[debug] AMX backtrace:
[debug] #0 native NetStats_BytesReceived () [080d9f60] from samp03svr
[debug] #1 000f0008 in public TimerOneSecond () from GameMode.amx
...




p.s. Я бы не использовал эти функции, но как защититься от дос атак?
Reply
#10

Quote:
Originally Posted by x_O
View Post
Я удалил функцию NetStats_MessagesReceived.

Теперь функция NetStats_BytesReceived вызывает аналогичную проблему


pawn Code:
for(new i, m = GetMaxPlayers(); i < m; i ++) {
        if(!IsPlayerConnected(i)) continue;

        f_var[1] = NetStats_BytesReceived(i);
        if(f_var[1] - BytesCount[i] > 7500) {
            Ban(i);
            continue;
        }
        else BytesCount[i] = f_var[1];
        ...
    }

[debug] Server crashed while executing GameMode.amx
[debug] AMX backtrace:
[debug] #0 native NetStats_BytesReceived () [080d9f60] from samp03svr
[debug] #1 000f0008 in public TimerOneSecond () from GameMode.amx
...




p.s. Я бы не использовал эти функции, но как защититься от дос атак?
ИМХО сама идея того что досер будет в это время находиться на сервере абсурдна.
Reply
#11

Quote:
Originally Posted by Stepashka
View Post
ИМХО сама идея того что досер будет в это время находиться на сервере абсурдна.
А где ему еще находиться?
Reply
#12

Quote:
Originally Posted by Jon_De
View Post
А где ему еще находиться?
Разные досеры бывают, для некоторых достаточно IP сервера. А отследить кучу пакетов с одного и того же IP клиента уже сложнее чем с конкретного игрока.
Reply
#13

В 0.3z обновляли защиту. Кто-нибудь проверял, работает ли она от пакетов, чтобы убрать из мода самописную защиту, которую я выкладывал выше?
Reply
#14

У меня неделю назад был жесткий флуд Packet was modified, sent by id и сервер не кикнул игрока. Те внутреная защита сампа не сработала почемуто.
Reply
#15

Quote:
Originally Posted by x_O
View Post
В 0.3z обновляли защиту. Кто-нибудь проверял, работает ли она от пакетов, чтобы убрать из мода самописную защиту, которую я выкладывал выше?
уже больше года работает эта защита
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)