Это сервис, предназначенный для проверки игровых серверов GoldSrc (HLDS), в частности Counter Strike 1.6, на предмет наличия команд, негативно влияющих на клиент игры.
API позволяет отправлять запросы к нашей базе данных и получать ответы в формате JSON либо текст. В данном документе перечислены требования и ограничения, наложенные на использование сервиса, описан общий порядок подключения, рассмотрены форматы запросов и ответов, а также приведены ответы на частые вопросы.
Документ предназначен для разработчиков, которым необходимо организовать автоматическую проверку серверов и фильтрацию по уровню угроз.
Различные игровые сервера могут содержать вредоносные плагины, предназначенные для раскрутки серверов запрещенными методами. К таким командам относятся, в том числе, автоконнект, бинды спама и коннекта на кнопки, перенаправление игрока на другой сервер (редирект), "подмена" (замена адреса Мастер-Сервера).
Эти плагины могут быть установлены на сервере администратором сознательно для раскрутки этого сервера, либо вредоносные функции были включены в один из безобидных плагинов. Вследствие выполнения этих команд на клиенте, Вы как владелец сервиса раскрутки, в конечном итоге теряете игрока. В случае автоконнекта или бинда коннекта на кнопки игроку надоедает автоматическое подключение на какой-то, как правило, румынский сервак и он удаляет КС и скачивает Counter Strike 1.6 в другом месте. Если это замена МС - игрок ничего не заметит, но вы уде потеряли "уник".
В настоящее время, ограничения на количество запросов с одного ключа или IP адреса в единицу времени отсутствуют. В дальнейшем, они могут быть введены на усмотрение владельцев проекта, в частности, если обнаружится что кто-либо из клиентов создает существенную нагрузку на ресурсы системы.
Запрос осуществляется с использованием HTTP протокола на адрес http://api.cs-best.org.ua/query.php. Обязательные параметры, передаваемые методом GET:
Параметр | Возможные значения |
k | Ваш личный ключ API длиной 32 знака [0-9a-f]. На этапе бесплатного тестирования сервиса можете пользоваться ключем 8770980dda0d333b96f31668ab60b636 |
m | Вызываемый метод API (см. далее) |
f | Формат ответа: json либо text |
Для проверки количества запросов, доступных Вам, можно использовать метод balance. Сервер возвращает значение в поле balance. Значением является целое положительное число либо 0, если Вы использовали доступный лимит.
Пример запроса:http://api.cs-best.org.ua/query.php?k=8770980dda0d333b96f31668ab60b636&m=balance&f=jsonПример ответа:
{"balance":"31415"}
Для проверки серверов на предмет отправки вредоносных команд, можно использовать метод srvinfo. Информация о сервере получается путем захода бота на этот сервер (не в реальном времени). Проверяются все сервера, когда-либо видимые нашей экспертной системой, но частота проверки может сильно отличаться и зависит от многих факторов включая то находится ли данный сервер в "приоритетных" мастерсерверах или нет. Помимо обязательных параметров, передаваемых методом GET, Вы должны передать список серверов для проверки в параметре servers методом POST. Параметр должен содержать не меньше 1 и не больше 100 серверов в 1 запросе. Список может содержать либо IP:PORT серверов с разделителем - переводом строки (как \n так и \r\n), так и JSON массив с целочисленными полями.
Сервис возвращает массив srvinfo, элементами которого являются структуры с информацией об указанных серерах. При этом, если Вы передавали список серверов с разделителем-переводом строки, то индексы серверов в массиве будут совпадать с порядковыми номерами (начиная с 0). Если же параметр servers содержал JSON массив - будут взяты индексы из него. В случае отсутствия информации о сервере, соответствующим ему элементом массива будет не структура, а строка SERVER_NOT_FOUND
Поля, возвращаемые в структуре данных:
Параметр | Описание | Пример |
first | Время первого обнаружения указанного сервера в каком-либо из известных нам мастерсерверов | 07.11.2013 |
last | Время последнего обнаружения указанного сервера | 26.01.2015 |
check | Дата последней проверки сервера нашим кластером проверяющих ботов. Вся перечисленная ниже информация предоставлена по состоянию на эту дату. | 26.03.2015 |
hostname | Имя сервера в момент проверки | Cool 18+ CS 1.6 Server 24/7 |
bots | Количество ботов, игравших на сервере в момент проверки. Если количество ботов превышает половину от maxplayers - как правило, это фейк-сервер. | 5 |
ping | Пинг (мс) в момент проверки. Может принимать различные значения, в частности высокие, в случае если проверка европейского сервера проходила с сервера расположенного на Дальнем Востоке. | 30 |
allow | Кому разрешено подключение к серверу:
| STEAM_ONLY |
build | Билд сервера | 5787 |
resources | Массив не стандартных ресурсов, которые загружаются с сервера на клиент. Учтите, что приводится весь список файлов, изменение которых теоретически может испортить клиент. Мі предоставляем Вам самостоятельно анализировать его и принимать решения. Например, при обнаружении загрузки TrackerUI.DLL сервер может улетать в бан безоговорочно, а изменение GameMenu.res запрещают не все. По каждому ресурсу приводятся поля:
| [0] => Array ( [name] => bin/TrackerUI.DLL [type] => 4 [size] => 128245 ) [1] => Array ( [name] => resource/GameMenu.res [type] => 4 [size] => 1000 ) [2] => Array ( [name] => maps/de_dust2_2x2.res [type] => 4 [size] => 100 ) |
redirects | Массив строк - команд, которые сервер отправил клиенту с целью его перенаправления на другой сервер | ["wait;wait;wait;wait;wait;"connect"cs.traficzone.com:27015"] |
commands | Массив строк - потенциально опасных команд, которые сервер отправил клиенту. Такими командами может быть, в частности, изменение биндов, рейтов и т.д. Не все из них обязательно вредоносные. | ["cl_updaterate 66","cl_cmdrate 66","bind \"n\" \"say \/shop\""] |
POST /query.php?k=[KEY]&m=srvinfo&f=text HTTP/1.0 Host: api.cs-best.org.ua Content-Length: 128 servers=127.0.0.1:27015\r\n127.0.0.1:27016\r\n127.0.0.1:27017\r\n127.0.0.1:27018Пример ответа:
Array ( [srvinfo] => Array ( [0] => Array ( [first] => 07.11.2013 [last] => 25.04.2015 [check] => 26.03.2015 [hostname] => Counter Strike 1.6 Server [bots] => 5 [ping] => 33 [allow] => ALL [build] => 5787 [resources] => Array ( [0] => Array ( [name] => bin/TrackerUI.DLL [type] => 4 [size] => 128000 ) ) ) [1] => Array ( [first] => 08.09.2014 [last] => 25.04.2015 [check] => 26.03.2015 [hostname] => Counter Strike 1.6 Server [bots] => 1 [ping] => 155 [allow] => ALL [build] => 5787 [resources] => Array ( [0] => Array ( [name] => resource/GameMenu.res [type] => 4 [size] => 1007 ) ) ) [2] => Array ( [first] => 08.09.2014 [last] => 25.04.2015 [check] => 26.03.2015 [hostname] => Counter Strike 1.6 CSDM [bots] => 5 [ping] => 237 [allow] => ALL [build] => 6027 ) [3] => "SERVER_NOT_FOUND" ) )
При добавлении сервера в свой мониторинг хотелось бы знать, посылает ли этот сервер вредоносные команды игрокам. Ранее для этого использовали метод srvinfo, однако, сейчас более надежной является проверка по базе данных нашего логгера. Помимо обязательных параметров, вы передаете список серверов абсолютно аналогично методу srvinfo для проверки в параметре servers методом POST. Параметр должен содержать не меньше 1 и не больше 1000 серверов в 1 запросе. Список может содержать как IP:PORT серверов с разделителем - переводом строки (как \n так и \r\n), так и JSON массив с целочисленными полями.
Сервис возвращает массив srvstat, элементами которого являются структуры с информацией об указанных серерах. При этом, если Вы передавали список серверов с разделителем-переводом строки, то индексы серверов в массиве будут совпадать с порядковыми номерами (начиная с 0). Если же параметр servers содержал JSON массив - будут взяты индексы из него. В случае отсутствия информации о сервере, соответствующим ему элементом массива будет не структура, а строка SERVER_NOT_FOUND
Поля, возвращаемые в структуре данных:
Параметр | Описание | Пример |
first | Время первого обнаружения указанного сервера в каком-либо из известных нам мастерсерверов | 07.11.2013 |
last | Время последнего обнаружения указанного сервера | 26.01.2015 |
total | Количество команд, посланных серверу всем игрокам с нашим протектором (суммарно). | 11222 |
badcmd | Количество команд из тех что выше, распознанных нашими фильтрами как плохие | 111 |
Учтите, что нулевое значение badcmd само по себе не гарантирует того что сервер не посылает "плохие" команды! Может быть, в системе просто нет информации о сервере. Таким образом, Ваш скрипт должен рассматривать три ситуации:
POST /query.php?k=[KEY]&m=srvstat&f=text HTTP/1.0 Host: api.cs-best.org.ua Content-Length: 128 servers=127.0.0.1:27016\r\n127.0.0.1:27017\r\n127.0.0.1:27018Пример ответа:
Array ( [balance] => 540558 [srvstat] => Array ( [0] => Array ( [first] => 08.09.2014 [last] => 11.05.2017 [total] => 10269 [badcmd] => 3448 ) [1] => Array ( [first] => 07.11.2013 [last] => 11.05.2017 [total] => 1027 [badcmd] => 0 ) [2] => Array ( [first] => 15.03.2014 [last] => 11.05.2017 [total] => 0 [badcmd] => 0 ) ) )
Метод srvstat предоставляет исключительно статистическую информацию о сервере - количество обработанных команд и количество распознанных как плохие. Если требуется проанализировать сервер с ненулевым значением badcmd, полученным методом srvstat, либо сразу собственноручно анализировать все подозрительные команды от этого сервера при его добавлении в мониторинг или при плановой проверке, если Вы используете наш протектор, целесообразно использовать именно этот метод.
Вы передаете список серверов абсолютно аналогично методу srvinfo и srvstat для проверки в параметре servers методом POST. Кроме того, можно использовать GET параметр since (тип - UNIX TIMESTAMP, например, функция time() на php) который ограничивает поиск данными более свежими чем указанное время. Период не может быть больше 15 суток, равно как и при отсутствии данного параметра устанавливается это значение.
Сервис возвращает массив cmdlog, элементами которого являются структуры с информацией об указанных серерах. Информацию об индексах см. в предыдущих методах. В случае отсутствия информации о сервере, соответствующим ему элементом массива будет не структура, а строка SERVER_NOT_FOUND. Каждая структура будет содержать поля first, last, total, badcmd (описание см. выше). Кроме того, данный метод возвращает еще одно поле этой структуры - массив cmdlist. Элементами массива являются структуры со следующими полями:
Параметр | Описание | Пример |
msg | Сообщение, посланное игроку | SVC_STUFFTEXT |
data | Собственно команда, может содержать переводы строки, разделители ; и другие спецсимволы | Motd_write Connect cs2.cs-best.org.ua:27015 |
num | Количество команд, посланных за время от since до момента запроса. | 24 |
Команды расположены в порядке убывания числа повторений (num). Поле MSG может принимать следующее значение:
Таким образом, пройдя по массиву cmdlist и проанализировав каждую уникальную команду, можно сделать вывод о допустимости добавления этого сервера в ваш мониторинг.
Пример запроса:POST /query.php?k=[KEY]&m=cmdlist&f=text HTTP/1.0 Host: api.cs-best.org.ua Content-Length: 128 servers=127.0.0.1:27016\r\n127.0.0.1:27017Пример ответа:
Array ( [balance] => 540558 [cmdlog] => Array ( [0] => Array ( [first] => 08.09.2014 [last] => 11.05.2017 [total] => 10269 [badcmd] => 3448 [cmdlist] => Array ( ) ) [1] => Array ( [first] => 15.03.2014 [last] => 11.05.2017 [total] => 2956 [badcmd] => 418 [cmdlist] => Array ( [0] => Array ( [msg] => SVC_STUFFTEXT [data] => Motd_write Connect cs2.cs-best.org.ua:27015 [num] => 24 ) [1] => Array ( [msg] => SVC_STUFFTEXT [data] => CoNNect cs2.cs-best.org.ua:27015 [num] => 23 ) [2] => Array ( [msg] => SVC_STUFFTEXT [data] => Motdfile "valve.rc " [num] => 8 ) [3] => Array ( [msg] => SVC_STUFFTEXT [data] => Motdfile "autoexec.CFG" [num] => 8 ) [4] => Array ( [msg] => SVC_STUFFTEXT [data] => Motdfile "!MD5/../../platform/config/MasterServers.vdf" [num] => 8 ) ) ) ) )
Первое время пользование системой бесплатно. В дальнейшем будет введена предоплата на определенное количество запросов.
Для интеграции необходимы базовые знания php и MySQL либо других технологий, на которых реализован Ваш сервис раскрутки.
Это API претендует на роль первого и единственного открытого API по борьбе с херовыми серверами, причем не только CS 1.6, но и любых игр на движке GoldSrc. Чем наша реализация лучше других? Найдите аналог и напишите нам. Был когда-то классный сервис log.cs-exes.ru, но он давно не актуален. Мы предоставляем данные как со "стучалки" из протектора, так и с ботов, которые периодически заходят на все существующие в мире сервера.
Данный хелп переработан и дополнен в мае 2017 года (в API появились новые методы).
Все вопросы и предложения присылайте на admin (собака) cs-best.org.ua