Атака сервера -
stabker - 20.12.2012
За 40 минут сервер вырубался уже 3 раза. Последние сообщения из лога
http://pastebin.com/4YCAsxVu
В логе вижу только то, что много подключений посылают и по-словам игроков, сервер начинает лагать.
Сначала думал на ошибку в коде, но по логам видно, что сервер вырубается на разных естественных событиях. То есть, они тут не причем.
Re: Атака сервера -
Barabashka - 20.12.2012
https://sampforum.blast.hk/showthread.php?tid=399288
Re: Атака сервера -
stabker - 20.12.2012
Quote:
Originally Posted by Barabashka
|
С чего вы взяли, что у меня та же самая проблема, как и у вас? И как проследить за тем, сколько он жрет оперативки, покуда у меня сервер на хостинге? Спасибо.
Re: Атака сервера -
AirKite - 20.12.2012
Пиши в основной форум на английском. Тут тебе не помогут решить эту проблему.
Re: Атака сервера -
stabker - 20.12.2012
Quote:
Originally Posted by AirKite
Пиши в основной форум на английском. Тут тебе не помогут решить эту проблему.
|
Я параллельно создал тему в англоязычном разделе
https://sampforum.blast.hk/showthread.php?tid=400833
Re: Атака сервера -
eakwarp - 20.12.2012
Quote:
Originally Posted by stabker
С чего вы взяли, что у меня та же самая проблема, как и у вас? И как проследить за тем, сколько он жрет оперативки, покуда у меня сервер на хостинге? Спасибо.
|
Нормальный хостинг предоставляет лог потребления ресурсов.
Re: Атака сервера -
stabker - 20.12.2012
Quote:
Originally Posted by eakwarp
Нормальный хостинг предоставляет лог потребления ресурсов.
|
В ПУ ничего подобного нету. Щас в поддержку напишу, гляди, дня через 2 ответят.
Re: Атака сервера -
eakwarp - 20.12.2012
Quote:
Originally Posted by stabker
В ПУ ничего подобного нету. Щас в поддержку напишу, гляди, дня через 2 ответят.
|
Повод сменить хостинг.
Re: Атака сервера -
stabker - 20.12.2012
Quote:
Originally Posted by eakwarp
Повод сменить хостинг.
|
Хочу перейти на ru-hoster, но у меня более 97500 аккаунтов (файловых).
Кстати, только что сервер залагал и выкинуло чуть больше 50 игроков. Видимо опять атака.
Re: Атака сервера -
stabker - 20.12.2012
Вообщем, вот ответ от техподдержки:
Quote:
Мы не ведем логи статистики потребления ресурсов сервером
Можно настроить вашему порту более усиленную защиту, но нужно знать с какими параметрами: сколько соединений может быть к порту за N секунд
|
Я не знаю сколько "может быть нормальных соединений за N секунд". Кто-то подскажет? И поможет ли это?
Re: Атака сервера -
-Stranger- - 23.12.2012
AirKite, сначала скажите хоть одну причину НЕ удалять управляющие символы из строки диалога?
PS> 50% серверов уязвимы через диалог, типа "000000\nadmin=9999". На нескольких десятков серверов проверял, и причём это были не нубосервера...
Свитч стоит потому что у меня идут ещё и другие замены.
Читами, OnDialogResponse можно вызвать с любым ID игрока, даже 1000
Re: Атака сервера -
AirKite - 23.12.2012
Quote:
Originally Posted by DartfoL
в чате и в командах есть, а в диалогах - нет
|
Серверная сторона или клиент?
Quote:
Originally Posted by -Stranger-
AirKite, сначала скажите хоть одну причину НЕ удалять управляющие символы из строки диалога?
PS> 50% серверов уязвимы через диалог, типа "000000\nadmin=9999". На нескольких десятков серверов проверял, и причём это были не нубосервера...
Свитч стоит потому что у меня идут ещё и другие замены.
Читами, OnDialogResponse можно вызвать с любым ID игрока, даже 1000
|
Такое ощущение что ответ был дан не на мой пост. Где я хоть слово сказал о управляющих символах?
Что значит свитч потому что идут и другие замены? Я о конкретном диапазоне... Вообще case x...y: где между x и y большой диапозон, юзать не целесообразно. И где я хоть слово сказал об идах? Я это подозревал и проверил ещё почти сразу после выхода версии с диалогами. Никогда даже не принимал ид из OnDialogResponse. Вообще нахрен там сделали ID's если диалог может быть всего 1шт (сразу). Логично ведь что ID будет таким же как и тот что ты отправил последний. (Кроме reconnect случаев, но это уже не актуально). Ах да, ещё и максимальный ид диалога ограничен до 32767 (не критично естественно).
Если это всё был не уход от ответа, и вы действительно хотели бы ответить, то пожалуйста перечитайте внимательнее:
http://forum.sa-mp.com/showpost.php?...5&postcount=40
Re: Атака сервера -
DartfoL - 23.12.2012
смысл делать на клиентской стороне, если можно пропатчить клиент, тем самым убрав все проверки и замены?
хорошо, что калкор это осознает
Re: Атака сервера -
-Stranger- - 24.12.2012
AirKite, такое ощущение, что под Вашим аккаунтом сидит куча народа или вы забываете что пишете.
Quote:
Странно... А в скромном примере убило
case 0x00 .. 0x1F
|
Это и есть управляющие символы, и что тут Вас так 'убило'?
Quote:
Вообще case x...y: где между x и y большой диапозон, юзать не целесообразно.
|
Лучше сделать 17 if ?
Quote:
И где я хоть слово сказал об идах?
|
Quote:
Это вообще реально что бы OnDialogResponse ответил с INVALID_PLAYER_ID или ответил от имени отключенного игрока
|
Вы, друг мой, сами прочтите что написали и сравните 2 поста...
Re: Атака сервера -
AirKite - 24.12.2012
-Stranger-, Да уж, кто то из нас упоролся или мною правят зелёные человечики. Если серьёзно, давайте разберёмся уже в недопонимании
Какое отношение INVALID_PLAYER_ID (playerid - тот от кого был отправлен диалог) имеет к dialogid (ID диалога)

DIALOG_ID можно подменить, но причём тут playerid?
OnDialogResponse(
playerid,
dialogid,
response,
listitem,
inputtext)
[
данные от клиента (их можно подменить) -
грубо говоря SAMP CONNECT ID (архитектура не позволяет его подменить)]
Идём дальше: О case 0x00...0x1F я говорил опять таки не о самих символах 0x00 и 0x1F а о switch и нецелесообразности юзать большой диапазон в switch > case. Ваш способ при компиляции условно создаёт 17 case. Если делать через if достаточно сделать одного условия if(inputtext[itr] >= 0x00 && inputtext[itr] <= 0x1F).
Для того что бы вы поняли о чём речь, попробуйте скомпилировать любой скрипт с диапазоном в case 0...99999999: (Не поленитесь и проверьте, надеюсь это вам поможет).
Re: Атака сервера -
eakwarp - 24.12.2012
Quote:
Originally Posted by AirKite
-Stranger-, Да уж, кто то из нас упоролся или мною правят зелёные человечики. Если серьёзно, давайте разберёмся уже в недопонимании
Какое отношение INVALID_PLAYER_ID (playerid - тот от кого был отправлен диалог) имеет к dialogid (ID диалога)  DIALOG_ID можно подменить, но причём тут playerid?
OnDialogResponse( playerid, dialogid, response, listitem, inputtext)
[ данные от клиента (их можно подменить) - грубо говоря SAMP CONNECT ID (архитектура не позволяет его подменить)]
Идём дальше: О case 0x00...0x1F я говорил опять таки не о самих символах 0x00 и 0x1F а о switch и нецелесообразности юзать большой диапазон в switch > case. Ваш способ при компиляции условно создаёт 17 case. Если делать через if достаточно сделать одного условия if(inputtext[itr] >= 0x00 && inputtext[itr] <= 0x1F).
Для того что бы вы поняли о чём речь, попробуйте скомпилировать любой скрипт с диапазоном в case 0...99999999: (Не поленитесь и проверьте, надеюсь это вам поможет).
|
switch - в павне if based, делайте выводы.
Re: Атака сервера -
-Stranger- - 24.12.2012
AirKite, всё-же я настаиваю на том, что playerid в OnDialogResponse подменить можно, используя бота.
Но смысл не в том, как это можно сделать, а в том что это можно сделать, и добиться, как минимум вызова playerid, которого не существует на сервере в данный момент.
По мне лучше перестраховаться, и проверить как на IsPlayerConnected, так и на INVALID_PLAYER_ID.
Данная проверка хуже серверу ну никак не сделает. А вот пользу может принести.
На счёт switch > case. Тут больше дело вкуса, но ради интереса сделаю тесты и выложу в эту тему.
Re: Атака сервера -
Stepashka - 24.12.2012
Quote:
Originally Posted by -Stranger-
AirKite, всё-же я настаиваю на том, что playerid в OnDialogResponse подменить можно, используя бота.
Но смысл не в том, как это можно сделать, а в том что это можно сделать, и добиться, как минимум вызова playerid, которого не существует на сервере в данный момент.
По мне лучше перестраховаться, и проверить как на IsPlayerConnected, так и на INVALID_PLAYER_ID.
Данная проверка хуже серверу ну никак не сделает. А вот пользу может принести.
На счёт switch > case. Тут больше дело вкуса, но ради интереса сделаю тесты и выложу в эту тему.
|
playerid сугубо внутрисерверная переменная и подменить её со стороны клиента нельзя.
Re: Атака сервера -
AirKite - 24.12.2012
Quote:
Originally Posted by eakwarp
switch - в павне if based, делайте выводы.
|
Да выводы уже были давно сделаны и не только мной, switch работает быстрее if, только вот нужно учитывать то, что проверки по диапазону в switch не может быть. т.е. case 0...9999 по своей сути как макрос, который создаёт case 0:, case 1:, case 2:, case 3:, и в некоторых ситуациях целесообразней использовать if соответственно.
Quote:
Originally Posted by -Stranger-
AirKite, всё-же я настаиваю на том, что playerid в OnDialogResponse подменить можно, используя бота.
Но смысл не в том, как это можно сделать, а в том что это можно сделать, и добиться, как минимум вызова playerid, которого не существует на сервере в данный момент.
По мне лучше перестраховаться, и проверить как на IsPlayerConnected, так и на INVALID_PLAYER_ID.
Данная проверка хуже серверу ну никак не сделает. А вот пользу может принести
|
Даже у бота есть свой ID, и он никак не равен INVALID_PLAYER_ID. Ты конечно прав, что лучше перестраховаться. Однако я себе представлял немного иную архитектуру SAMP. Если playerid было бы возможно подменить, это уже бы давно делали. В любом случае твоя проверка не защитит от мистической подмены playerid, ибо по идее playerid создаётся по факту подключения, а если он есть то и IsPlayerConnected вернёт true... в прочем не будем холиварить, я исходных кодов последних версий samp не видел, как и вы
Quote:
Originally Posted by -Stranger-
На счёт switch > case. Тут больше дело вкуса, но ради интереса сделаю тесты и выложу в эту тему.
|
На самом деле всё зависит сугубо от ситуации. Пример:
pawn Code:
new tick, lol = 5000;
tick = GetTickCount();
for(new i; i < 100000; i++) {
switch(lol) {
case 0..10000: {
// code
}
}
}
printf("SWITCH: %d ms", GetTickCount()-tick);
tick = GetTickCount();
for(new i; i < 100000; i++) {
if(lol >= 0 && lol <= 10000) {
// code
}
}
printf("SWITCH: %d ms", GetTickCount()-tick);
покажет:
Code:
SWITCH: 771 ms
SWITCH: 20 ms
Однако для диапазона в 17, всё же switch будет чуток быстрее.
pawn Code:
new tick, lol = 17;
tick = GetTickCount();
for(new i; i < 100000; i++) {
switch(lol) {
case 0..17: {
// code
}
}
}
printf("SWITCH: %d ms", GetTickCount()-tick);
tick = GetTickCount();
for(new i; i < 100000; i++) {
if(lol >= 0 && lol <= 17) {
// code
}
}
printf("SWITCH: %d ms", GetTickCount()-tick);
Code:
SWITCH: 15 ms
SWITCH: 20 ms
p.s. Вспомнил тему где спрашивалось о том, как сделать case 0..∞:
Re: Атака сервера -
dimonml - 24.12.2012
Злостный оффтоп: читая дискуссию вспомнилось.
Я сейчас ковыряюсь с united 1.2 и там обнаружилась интересная вещь. В Юнайтеде добавили педов (ид добавленных педов более 300), они без особых проблем подхватились сампом, за исключением колбека OnPlayerSpawn. Не смотря на то, что номер Skin является серверной переменной и кроме как самим сервером никак не выставляется, в обработчике rpc сампа стояла проверка и если SkinId был >= 300, то обработка прекращалась
Вполне возможно, что это радумент, но сейчас выглядит довольно смешно.
Так и тут: если удалось подменить player_id, то злоумышленник способен отсылать rpc вызовы от имени любого игрока и вся архитектура шифрования сессий RakNet уже скомпрометирована: наличие дополнительной проверки сервер уже не спасет