1. Форум находится в стадии переноса. Многое может не работать. Просьба потерпеть. Любые проблемы обсуждаем в теме переезда.
    Скрыть объявление

Очередной способ вышибания сервера

Тема в разделе "Защита сервера (Server Protection)", создана пользователем abyse, 19 Октябрь 2014.

  1. Автор темы
    abyse

    abyse Active Member L2 OFF Dev Team

    Сообщения:
    1.048
    Симпатии:
    5
    Меня давно не было, потому на всякий случай напомню, С4, экстендер свой. Вышибают умышленно, тут уже сомнений нет, возможно данный баг сидит в остатках ампеда (переписанные фиксы из ампеда в моем случае вырезаны). Буду рад услышать ваши варианты и предположения о лечении данного недуга.
    --- Добавлено 20 Октябрь 2014 ---
    А баг разнообразный....

    Код:
    IOThread [1][3323] (ahehe):  void IOThread_common(void *arglist) -> void CIOObject::TimerDispatch(bool bRootLoop) -> void CThreadLocalTimer::Dispath -> void CCreatureController::TimerExpired(int id) -> inline void AddExecutable(MemoryObject *Matrix, Native Func, CExecutionArgument* Arg) -> add exec - func call -> ASYNCHRONOUS_SERIALIZE_IMPL1(CCreatureController, AsyncTimerExpired, int, id) -> void CCreatureController::DoPendingAction(int nRecursiveCount) -> void CCreatureController::DoPendingAction(int nRecursiveCount) -> void CMoveAction::Start() -> void CCreatureController::ActionBroadcastStopMove() -> void BroadcastToNeighborDist(FVector vPos, int dist, const char* format, ...) -> io_buffer_crash
    
    P.S. Если кто знает механизмы данного процесса и не хочет в открытую писать, напишите в личку, не ради доната, а ради обычных игроков (у меня не донатный проект).
     
    Последнее редактирование: 20 Октябрь 2014
  2. 01000000

    01000000 Well-Known Member Команда форума Модератор L2 OFF Dev Team

    Сообщения:
    1.283
    Симпатии:
    172
    io_buffer_crash - задействование всего пула пакетов, когда дойдет до дна сервер упадет
    в кфг IOBufferCount
    в крашлоге строчка начинающаяся на то же слово
    так как вызов функции выделения очередного пула для пакета находится во многих местах, падать может с разными путями функций

    разборки почему идет задействование всего пула пакетов являются решением вопроса
    но также может быть случай допущения ошибки при переходе с ампеда, и иопул просто перестаю освобождатся
     
    Последнее редактирование: 20 Октябрь 2014
    MAN-biker нравится это.
  3. Автор темы
    abyse

    abyse Active Member L2 OFF Dev Team

    Сообщения:
    1.048
    Симпатии:
    5
    Вспоминая пляски с ИО когда пилил оффторг динамика нарастания "угрозы" была другая, тут вылетает "сразу".

    Код:
    Crashed Thread[0].
    CRASH
    LowIOBuffer
    Server Up Time : Sun Oct 19 16:59:45 2014
    Current Time : Sun Oct 19 17:51:38 2014
    Elapsed Time : 0 days 0 hours 51 minutes 53 seconds
    IOBufferPool - 19 / 50000,  PendingWrite 75318 bytes [9]
    =============== object report
    user[314/0], npc[34167/0], item[11599/2372], usersocket[49646]
    =============== npc server connection log
    Connect : Sun Oct 19 17:06:52 2014
    
    [(4768) 2014/10/19 17:51:38]: =======================
    an Access Violation in module L2Server.exe at 0033:0061e18b.
    start at 2014/10/19 16:59:44
    Write to location 00000000 caused an access violation.
    
    Registers:
    EAX=0000000b CS=0033 EIP=0061e18b EFLGS=00010206
    EBX=a42b9260 SS=002b ESP=6fffd500 EBP=00000000
    ECX=0000000a DS=002b ESI=00000000 FS=0053
    EDX=0000000a ES=002b EDI=00a042a8 GS=002b
    Bytes at CS:EIP:
    c6 45 00 01 43 ff 8c 85 70 9d 17 01 89 ab 38 20
    Stack dump:
    6fffd500: a42b9260 00000000 00000000 00000000 00000000 00000000 00a042a8 00000000
    6fffd520: fffffffe ffffffff 00000000 00000000 00000000 00000000 00400000 00000000
    6fffd540: 00000000 00000000 007d5e05 00000000 00a72700 00000000 0098b750 00000000
    6fffd560: 6fffd610 00000000 79c077d4 00000000 fffffffe ffffffff 0004c158 00000000
    6fffd580: 0000064f 00000000 0000064f 00000000 00a72790 00000000 007d5fcf 00000000
    6fffd5a0: 00000000 00000000 00400000 00000000 0004c158 00000000 79c077d4 00000000
    6fffd5c0: fffffffe ffffffff fffffffe ffffffff 00000001 00000000 00000004 00000000
    6fffd5e0: 00000004 00000000 48105f21 00000000 7c85f044 00000000 00719938 00000000
    6fffd600: 79df7ab4 00000000 0098b750 00000000 0000000e 00000000 48105f21 00000000
    6fffd620: 00000004 00000000 00000009 00000000 00000c9f 00000000 0000000a 00000000
    
    С иопулом после нормальных сетевух и сас у меня вообще проблем никогда не было. Как видно в данном примере ио почти пуст. По логике это передача явно "чего то такого, что не должо передаваться процедуре".
    --- Добавлено 22 Октябрь 2014 ---
    Вспоминая былые ошибки и фиксы кажись в ио уходит пакет большей чем нужно длинны.... (предположения).
    --- Добавлено 22 Октябрь 2014 ---
    Помоему тут явно в буфер не то идет:

    Код:
    IOThread [1][28689] (ahehe):  void IOThread_common(void *arglist) -> void CIOObject::TimerDispatch(bool bRootLoop) -> void CThreadLocalTimer::Dispath -> User::TimerExpired() -> User::SendCharInfo() -> void BroadcastToNeighborExceptSelf(int id, FVector vPos, const char* format, ...) -> FOR ALL USER XYZ INDEX -> ASYNCHRONOUS_SERIALIZE_FAST_IMPL(CSocket, AsyncSendConstBuffer, CIOBuffer*, pBuffer) -> io_buffer_crash
    
     
    Последнее редактирование: 22 Октябрь 2014
  4. Yksus

    Yksus Member

    Сообщения:
    602
    Симпатии:
    9
    abyse

    DoS on Port 7777, кушает все 50к bufferа отсюда и краш.

    а Ошибка краша, может быть любая, тк bufferа нету - а раз ему не хватает, на любой из нуждающих выполняемых процедур - падает.


    Доп.:
    Даже если посмотреть на: usersocket[49646] - тут уже сомнений не остается, 100% DoS on Port.
     
    Последнее редактирование: 22 Октябрь 2014
  5. 01000000

    01000000 Well-Known Member Команда форума Модератор L2 OFF Dev Team

    Сообщения:
    1.283
    Симпатии:
    172
    каждый сокет выделяет себе 1 пул на чтение входящих данных с пакета, и бывает 1-2+ на отправку (именно в момент когда гс что то хочет отправить)
    в среднем 3-й иопул может есть буффер массовой рассылки выделяемый именно сервом (Broadcast подобные функции, отправка на другие подсервы и тд)
    итого формула должна быть в среднем 4 * колво сокетов, и это минимум которого может не хватать
    Hidden Content:
    **Hidden Content: To see this hidden content your post count must be 500 or greater.**
    что бы предовтратить краш от такого нужно ограничить свободное открывание сокетов на геймсерв порте (на чистом любой может открыть до 10 штук просто набрав в браузере урл с портом гс)

    все там туда идет
     
    Последнее редактирование: 22 Октябрь 2014
    WaLas нравится это.
  6. Автор темы
    abyse

    abyse Active Member L2 OFF Dev Team

    Сообщения:
    1.048
    Симпатии:
    5
    По логике получается пакеты в пул не попали (есть проверка), но сокеты заняты, отсюда вопрос теоретического плана, резать на маршрутере пакетрейт и число линков ?
    --- Добавлено 22 Октябрь 2014 ---
    "Любой до 10 штук" - всплесков на графике трафа нету, есть способы "залипания" сокетов без использования оффторга ? (если был бы оффторг были бы всплески онлайна).
     
  7. 01000000

    01000000 Well-Known Member Команда форума Модератор L2 OFF Dev Team

    Сообщения:
    1.283
    Симпатии:
    172
    Hidden Content:
    **Hidden Content: To see this hidden content your post count must be 500 or greater.**
     
  8. Media

    Media New Member

    Сообщения:
    1
    Симпатии:
    0
    ради обычных игроков ты мог бы уделять серверу больше времени
    обычные игроки уже забивают конкретно, потому что делать на севере нечего

    К сожалению.

    Прочти почту, пожалуйста
     
  9. WaLas

    WaLas Member

    Сообщения:
    98
    Симпатии:
    3
    Как мне это сделать?
     

Поделиться этой страницей