[CS:GO][ANY] Отлов строки из консоли сервера.

Тема в разделе "Программирование / Скриптинг", создана пользователем l.st, 4 мар 2016.

  1. l.st

    l.st

    Сообщения:
    112
    Симпатии:
    15
    Можно ли как-то отловить строку консоли сервера?
    Например в консоли строка BURATINO ULETAET V GAGRY.
    Она логируется только в condebug, а нужно только её поймать как-то из консоли...
     
  2. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    Ну как вариант скачай Cleaner и посмотри исходник. Станет понятно как тебе действовать.
     
    l.st нравится это.
  3. l.st

    l.st

    Сообщения:
    112
    Симпатии:
    15
    Точно! Спасибо! У самого он на кз глобале и забыл про него!)))

    ps
    Идея простая: ловить IP rate limiting и в лог его писать, а f2b уже отлавливать и в iptables правилом DROP отправлять.
     
  4. gibs

    gibs Фитиль народного волненья

    Сообщения:
    536
    Симпатии:
    133
    А чем плох стандартный квар sv_max_queries_sec ?
     
  5. l.st

    l.st

    Сообщения:
    112
    Симпатии:
    15
    Давайте смотреть на вещи реально: это не запрос юзера об игре, идёт спланированная масштабная атака и уменьшение окна это лишь её смягчение и вдобавок ухудшение видимости в сети, а не отделение мух от котлет. Вопрос как это случилось, что сервера различных мастей (голдсурс и сурс) способны рефлекторно обращаться к моим серверам, это уже второе дело, хоть и интересное, главное сейчас составить список "редисок" и дропать их на фаерволе.
     
  6. b6aCKJfx

    b6aCKJfx

    Сообщения:
    7
    Симпатии:
    9
    Надёжно перехватить консоль можно только хукнув SPEW_ функцию библиотеки tier0, заменив на свою. Как это сделать, написано почти полностью в исходнике Cleaner-а, только автор почему-то искал функцию по паттерну, хотя можно было сделать проще и лучше. Прототипы SPEW_ функций можно найти в SDK 2013, файл dbg.h.

    Если бы вопрос касался не кс:го, а сурс движка, я бы сделать что-то вроде:

    SpewOutputFunc_t DefaultSpewFunction;

    В CServerGameDLL::DLLInit:

    DefaultSpewFunction = GetSpewOutputFunc();
    SpewOutputFunc(CleanerSpewFunc);

    В CServerGameDLL::DLLShutdown:

    SpewOutputFunc(DefaultSpewFunction);

    Ну, а в самой CleanerSpewFunc уже делать сравнение строки, приходящей в функцию (можно позволить себе регулярки), если найдено искомое - отправляем в лог на диск сервера. Cleaner действует по тому же принципу, только он не пропускает указанные сообщения, возвращая SPEW_CONTINUE (см. функцию DETOUR_DECL_STATIC2 в модуле плагина). Тебе надо заменить либо дописать туда свою логику, скидывающую в лог то, что тебя интересует.
     
    l.st нравится это.