Ru/Server queries

Вы можете запросить информацию с работающего игрового сервера, используя пакеты UDP/IP. В этой статье описывается формат различных пакетов, которые могут быть отправлены или получены, а также протокол, используемый для их маршрутизации.
= Типы данных =
Все запросы сервера состоят из пяти основных типов данных, упакованных вместе в поток данных. Все типы имеют порядок байтов little endian.
Тип	Описание
 	8-битный символ или беззнаковое целое число
 	16-битное знаковое целое число
 	32-битное знаковое целое число
 	32-битное число с плавающей запятой
 	64-битное беззнаковое целое число
 	Нуль-терминированное байтовое поле переменное длины, кодировка UTF-8
= Протокол =
Размер пакета, используемого протоколом опроса, составляет 1400 байт (без учета заголовка UDP/IP). Каждый ответ содержит заголовок, зависящий от протокола, но если ответ требует более одного пакета, то он будет разделен, и каждый пакет будет содержать дополнительный заголовок.
== Пример ответа ==
Данные 	Тип 	Комментарий
Header 	 	Всегда равно -1 (0xFFFFFFFFF)
Содержимое	Содержимое	Содержимое
== Формат мультипакетного ответа ==
=== сервер===
Данные 	Тип 	Комментарий
Header 	 	Всегда равно -2 (0xFFFFFFFE)
ID 	 	Уникальный номер, присваиваемый сервером на каждый ответ
Packet number	 	Верхние 4 бита обозначают количество текущего пакета (начиная с 0), а нижние 4 бита - общее количество пакетов (от 2 до 15).
Содержимое 	Содержимое	Содержимое
=== сервер===
Данные 	Тип	Комментарий 	 	 	
Header 	 	Всегда равно -2 (0xFFFFFFFE) 	 	 	
ID 	 	То же значение, что и для сервера . Однако, если равен 1, то ответ был сжат алгоритмом и после получения необходимо распаковать ответ прежде чем он будет обработан	 	 	
Total 	 	Общее количество пакетов в ответе 	 	 	
Number 	 	Номер пакета. Начинается с 0 	 	 	
Size 	 	Присутствует только в новой версии движка , это максимальный размер пакета, который может быть принят до того, как произойдет коммутация пакетов. Это касается только игрового протокола, в протоколе запросов к серверу невозможно запросить пакеты размером меньше, чем размер по умолчанию
Значение по умолчанию - 1248 байт (0x04E0)	 	 	
Это присутствует только в первом пакете ответа и только в том случае, если ответ сжат
{| style="margin:10px"	Это присутствует только в первом пакете ответа и только в том случае, если ответ сжат
{| style="margin:10px"	Это присутствует только в первом пакете ответа и только в том случае, если ответ сжат
{| style="margin:10px" 	Данные	Тип	Комментарий
Size 	 	Размер всего ответа после его распаковки 	 	 	
CRC32 sum	 	Контрольная сумма CRC32 несжатого ответа. 	 	 	
Так как UDP-пакеты могут прибывать в разном порядке и/или с задержкой, каждый пакет должен быть проверен своим "ID" и "Number", чтобы убедиться, что он всегда один и тот же ответ и что все пакеты прибыли.
= Запросы =
Сервер отвечает на 5 запросов:
;A2S_INFO
:Основная информация о сервере
;A2S_PLAYER
:Подробности о каждом игроке на сервере
;A2S_RULES
:Правила, которые использует сервер
;A2A_PING
:Пинг сервера. (УСТАРЕЛО)
;A2S_SERVERQUERY_GETCHALLENGE
:Возвращает номер вызова для использования в запросе игрока и правила. (УСТАРЕЛО)
Запросы должны отправляться в UDP-пакетах.
== A2S_INFO ==
Получает информацию о сервере, включая, но не ограничиваясь: его название, карту, на которой он играет в настоящее время, и количество игроков.
=== Формат запроса ===
Данные 	Тип	Значение
Header 	 	'T' (0x54)
Payload 	 	"Source Engine Query\0"
Challenge	 	4-byte challenge (опционально -- смотрите ниже)
 FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 ÿÿÿÿTSource Engi
 6E 65 20 51 75 65 72 79 00 ne Query.
Пример использования числа "challenge":
Если ответ сервера:
FF FF FF FF 41 0A 08 5E EA
Требуется повторить запрос с добавлением "challenge" числа в конец запроса:
FF FF FF FF 54 53 6F 75 72 63 65 20 45 6E 67 69 6E 65 20 51 75 65 72 79 00 0A 08 5E EA
Сервер может ответить данными немедленно. Однако, это делает его уязвимым перед "Reflection Amplification Attack".
Это происходит из-за того, что ответ сервера в разы больше, чем запрос.
Поэтому, сервер может ответить на запрос "challenge" значением используя S2C_CHALLENGE ('A' - 0x41).
Данное изменение было введено в декабре 2020 для исправления "Reflection Amplification Attack" и все клиенты получили поддержу нового протокола.
Посмотрите этот пост, чтобы получить дополнительную информацию.
=== Формат ответа ===
Данные 	Тип	Комментарий 	 	 	
Header 	 	Всегда равно 'I' (0x49) 	 	 	
Protocol 	 	Версия протокола, используемая сервером 	 	 	
Name 	 	Имя сервера 	 	 	
Map 	 	Карта сервера, загруженного в данный момент 	 	 	
Folder 	 	Название папки, содержащей игровые файлы 	 	 	
Game 	 	Полное название игры 	 	 	
ID 	 	 	 	 	
Players 	 	Количество игроков на сервере 	 	 	
Max. Players	 	Максимальное количество игроков на сервере 	 	 	
Bots 	 	Количество ботов на сервере 	 	 	
Server type 	 	Указывает тип сервера: 'd' для выделенного сервера'l' для не выделенного сервера'p' для реле (proxy) 	 	 	
Environment 	 	Указывает на операционную систему сервера: 'l' для Linux'w' для Windows'm' или 'o' для Mac (код изменился после L4D1) 	 	 	
Visibility 	 	Указывает, требуется ли серверу пароль: 0 для публичного1 для частного 	 	 	
 	 	Указывает, использует ли сервер VAC: 0 для небезопасного1 для безопасного 	 	 	
Эти поля существуют в ответе только в том случае, если сервер - :
{| style="margin:10px;"	Эти поля существуют в ответе только в том случае, если сервер - :
{| style="margin:10px;"	Эти поля существуют в ответе только в том случае, если сервер - :
{| style="margin:10px;" 	Данные	Тип	Комментарий
Mode 	 	Показывает игровой режим: 0 для Hunt1 для Elimination2 для Duel3 для Deathmatch4 для VIP-команды5 для Team Elimination	 	 	
Witnesses 	 	Количество свидетелей, необходимых для ареста игрока 	 	 	
Duration 	 	Время (в секундах) до того, как игрок будет арестован во время наблюдения 	 	 	
Пример ответа для :
 FF FF FF FF 49 02 67 61 6D 65 32 78 73 2E 63 6F ÿÿÿÿI.game2xs.co
 6D 20 43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65 m Counter-Strike
 20 53 6F 75 72 63 65 20 23 31 00 64 65 5F 64 75 Source #1.de_du
 73 74 00 63 73 74 72 69 6B 65 00 43 6F 75 6E 74 st.cstrike.Count
 65 72 2D 53 74 72 69 6B 65 3A 20 53 6F 75 72 63 er-Strike: Sourc
 65 00 F0 00 05 10 04 64 6C 00 00 31 2E 30 2E 30 e......dl..1.0.0
 2E 32 32 00 .22.
Пример ответа для :
 FF FF FF FF 49 07 53 68 69 70 20 53 65 72 76 65 ÿÿÿÿI.Ship Serve
 72 00 62 61 74 61 76 69 65 72 00 73 68 69 70 00 r.batavier.ship.
 54 68 65 20 53 68 69 70 00 60 09 01 05 00 6C 77 The Ship.`....lw
 00 00 01 03 03 31 2E 30 2E 30 2E 34 00 .....1.0.0.4.
Пример ответа для :
 FF FF FF FF 49 2F 53 65 6E 73 65 6D 61 6E 6E 20 ÿÿÿÿI/Sensemann
 53 69 4E 20 44 4D 00 70 61 72 61 64 6F 78 00 53 SiN DM.paradox.S
 69 4E 20 31 00 53 69 4E 20 31 00 1D 05 00 10 00 iN 1.SiN 1......
 6C 77 00 00 31 2E 30 2E 30 2E 30 00 lw..1.0.0.0.
Пример ответа для :
 FF FF FF FF 49 FC 54 68 65 20 44 75 64 65 27 73 ÿÿÿÿIüThe Dude's
 20 64 6F 6A 6F 00 53 6F 63 63 65 72 00 52 44 4B dojo.Soccer.RDK
 46 53 6F 63 63 65 72 00 52 61 67 44 6F 6C 6C 4B FSoccer.RagDollK
 75 6E 67 46 75 3A 20 53 6F 63 63 65 72 00 EA 03 ungFu: Soccer.ê.
 01 04 00 00 77 00 00 32 2E 33 2E 30 2E 30 00 ....w..2.3.0.0.
==== Устаревший ответ ====
Серверы GoldSource отвечают тем же ответом, что и серверы Source. Более старые серверы и серверы до начала работы со Steam все еще отвечают в формате ответа, приведенном ниже. GoldSource можно отличить от Source с помощью AppID.
Данные 	Тип	Комментарий 	 	 	
Header 	 	Всегда равно 'm' (0x6D) 	 	 	
Address 	 	IP-адрес и порт сервера 	 	 	
Name 	 	Имя сервера 	 	 	
Map 	 	Карта сервера, загруженного в данный момент 	 	 	
Folder 	 	Название папки, содержащей игровые файлы 	 	 	
Game 	 	Полное название игры 	 	 	
Players 	 	Количество игроков на сервере 	 	 	
Max. Players 	 	Максимальное количество игроков на сервере 	 	 	
Protocol 	 	Версия протокола, используемая сервером 	 	 	
Server type 	 	Указывает тип сервера: 'D' для выделенного сервера'L' для не выделенного сервера'P' для сервера HLTV 	 	 	
Environment 	 	Указывает на операционную систему сервера: 'L' для Linux'W' для Windows 	 	 	
Visibility 	 	Указывает, требуется ли серверу пароль: 0 для публичного1 для частного 	 	 	
Mod 	 	Показывает, является ли игра модом: 0 для 1 для Half-Life mod 	 	 	
Эти поля присутствуют в ответе только в том случае, если "Mod" равен 1:
{| style="margin:10px"	Эти поля присутствуют в ответе только в том случае, если "Mod" равен 1:
{| style="margin:10px"	Эти поля присутствуют в ответе только в том случае, если "Mod" равен 1:
{| style="margin:10px" 	Данные	Тип	Комментарий
Link 	 	URL на модный сайт 	 	 	
Download Link	 	URL для загрузки мода 	 	 	
NULL 	 	NULL байт (0x00) 	 	 	
Version 	 	Версия мода установлена на сервере 	 	 	
Size 	 	Пространство (в байтах) мода занимает 	 	 	
Type 	 	Указывает тип мода: 0 для одиночного и многопользовательского мода1 для только многопользовательского мода 	 	 	
DLL 	 	Указывает, использует ли мод свою собственную DLL: 0, если он использует . DLL1 если он использует свою собственную DLL	 	 	
Пример ответа:
 FF FF FF FF 6D 37 37 2E 31 31 31 2E 31 39 34 2E ÿÿÿÿm77.111.194.
 31 31 30 3A 32 37 30 31 35 00 46 52 20 2D 20 56 110:27015.FR - V
 65 72 79 47 61 6D 65 73 2E 6E 65 74 20 2D 20 44 eryGames.net - D
 65 61 74 6D 61 74 63 68 20 2D 20 6F 6E 6C 79 20 eatmatch - only
 73 75 72 66 5F 73 6B 69 20 2D 20 6E 67 52 00 73 surf_ski - ngR.s
 75 72 66 5F 73 6B 69 00 63 73 74 72 69 6B 65 00 urf_ski.cstrike.
 43 6F 75 6E 74 65 72 2D 53 74 72 69 6B 65 00 0C Counter-Strike..
 12 2F 64 6C 00 01 77 77 77 2E 63 6F 75 6E 74 65 ./dl..www.counte
 72 2D 73 74 72 69 6B 65 2E 6E 65 74 00 00 00 01 r-strike.net....
 00 00 00 00 9E F7 0A 00 01 01 00 ....ž÷.....
== A2S_PLAYER ==
В этом запросе запрашивается информация об игроках, находящихся в данный момент на сервере. Для получения номера вызова необходимо сделать первый шаг.
=== Формат запроса ===
Данные 	Тип	Значение
Header 	 	'U' (0x55)
Challenge	 	Номер вызова или -1 (0xFFFFFFFFF) для получения номера вызова
Формат ответа на вызов:
Данные 	Тип	Значение
Header 	 	'A' (0x41)
Challenge	 	Номер вызова
Пример запроса на вызов:
 FF FF FF FF 55 FF FF FF FF ÿÿÿÿUÿÿÿÿ"
Пример ответа на вызов:
 FF FF FF FF 41 4B A1 D5 22 ÿÿÿÿAÿÿÿÿ"
Пример запроса A2S_PLAYER с номером принятого вызова:
 FF FF FF FF 55 4B A1 D5 22 ÿÿÿÿUÿÿÿÿ"
=== Формат ответа ===
Данные 	Тип	Комментарий 	 	 	
Header 	 	Всегда равно 'D' (0x44) 	 	 	
Players 	 	Количество игроков, чья информация была собрана 	 	 	
Для каждого игрока в "Players" есть этот фрагмент в ответе:
{| style="margin:10px"	Для каждого игрока в "Players" есть этот фрагмент в ответе:
{| style="margin:10px"	Для каждого игрока в "Players" есть этот фрагмент в ответе:
{| style="margin:10px"	Данные	Тип	Комментарий
Index 	 	Индекс игрока, начиная с 0 	 	 	
Name 	 	Имя игрока 	 	 	
Score 	 	Счет игрока 	 	 	
Duration	 	Время (в секундах) того, как долго подключен игрок к серверу	 	 	
 дополнительная информация об игроке (приходит после основной информации в пакете):
Данные	Тип	Комментарий
Deaths	 	Смерти игрока
Money 	 	Деньги игрока
Пример ответа:
 FF FF FF FF 44 02 01 5B 44 5D 2D 2D 2D 2D 3E 54 ÿÿÿÿD..[D]---->T
 2E 4E 2E 57 3C 2D 2D 2D 2D 00 0E 00 00 00 B4 97 .N.W<----.....´—
 00 44 02 4B 69 6C 6C 65 72 20 21 21 21 00 05 00 .D.Killer !!!...
 00 00 69 24 D9 43 ..i$ÙC
Пример ответа :
 FF FF FF FF 44 13 00 53 68 69 70 6D 61 74 65 31 ▒▒▒▒D..Shipmate1
 00 00 00 00 00 00 00 80 BF 01 53 68 69 70 6D 61 .......▒▒.Shipma
 74 65 32 00 00 00 00 00 00 00 80 BF 02 53 68 69 te2.......▒▒.Shi
 70 6D 61 74 65 33 00 00 00 00 00 00 00 80 BF 03 pmate3.......▒▒.
 53 68 69 70 6D 61 74 65 34 00 00 00 00 00 00 00 Shipmate4.......
 80 BF 04 53 68 69 70 6D 61 74 65 35 00 00 00 00 ▒▒.Shipmate5....
 00 00 00 80 BF 07 28 31 29 4C 61 6E 64 4C 75 62 ...▒▒.(1)LandLub
 62 65 72 00 00 00 00 00 D3 8E 68 45 00 00 00 00 ber.....ӎhE....
 C4 09 00 00 00 00 00 00 C4 09 00 00 00 00 00 00 ▒.......▒.......
 C4 09 00 00 00 00 00 00 C4 09 00 00 00 00 00 00 ▒.......▒.......
 C4 09 00 00 00 00 00 00 C4 09 00 00 ▒.......▒...
== A2S_RULES ==
Возвращает правила сервера или конфигурационные переменные в формате имя/значение. Этот запрос требует начального шага проверки.
=== Пример запроса ===
Данные 	Тип	Комментарий
Header 	 	Всегда равно 'V' (0x56)
Challenge	 	Номер вызова или -1 (0xFFFFFFFFF) для получения номера вызова
Формат ответа на вызов:
Данные 	Тип	Комментарий
Header 	 	Всегда равно 'A' (0x41)
Challenge	 	Номер вызова
Пример запроса на вызов:
 FF FF FF FF 56 FF FF FF FF ÿÿÿÿVÿÿÿÿ"
Пример ответа на вызов:
 FF FF FF FF 41 4B A1 D5 22 ÿÿÿÿVK¡Õ"
Окончательный запрос, включающий номер полученного вызова:
 FF FF FF FF 56 4B A1 D5 22 ÿÿÿÿVK¡Õ"
=== Формат ответа ===
Данные	Тип	Комментарий 	 	 	
Header	 	Всегда равно 'E' (0x45). 	 	 	
Rules 	 	Количество правил в ответе	 	 	
Для каждого правила в "Rules" есть этот фрагмент в ответе:
{| style="margin:10px;"	Для каждого правила в "Rules" есть этот фрагмент в ответе:
{| style="margin:10px;"	Для каждого правила в "Rules" есть этот фрагмент в ответе:
{| style="margin:10px;"	Данные	Тип	Комментарий
Name 	 	Название правила 	 	 	
Value 	 	Значение правила 	 	 	
Пример ответа:
 FE FF FF FF 56 0A 00 00 02 FF FF FF FF 45 5D 00 þÿÿÿV....ÿÿÿÿE].
 5F 74 75 74 6F 72 5F 62 6F 6D 62 5F 76 69 65 77 _tutor_bomb_view
 61 62 6C 65 5F 63 68 65 63 6B 5F 69 6E 74 65 72 able_check_inter
 76 61 6C 00 30 2E 35 00 5F 74 75 74 6F 72 5F 64 val.0.5._tutor_d
 65 62 75 67 5F 6C 65 76 65 6C 00 30 00 5F 74 75 ebug_level.0._tu
 74 6F 72 5F 65 78 61 6D 69 6E 65 5F 74 69 6D 65 tor_examine_time
 00 30 2E 35 00 5F 74 75 74 6F 72 5F 68 69 6E 74 .0.5._tutor_hint
 5F 69 6E 74 65 72 76 61 6C 5F 74 69 6D 65 00 31 _interval_time.1
 30 2E 30 00 5F 74 75 74 6F 72 5F 6C 6F 6F 6B 5F 0.0._tutor_look_
 61 6E 67 6C 65 00 31 30 00 5F 74 75 74 6F 72 5F angle.10._tutor_
 6C 6F 6F 6B 5F 64 69 73 74 61 6E 63 65 00 32 30 look_distance.20
 30 00 5F 74 75 74 6F 72 5F 6D 65 73 73 61 67 65 0._tutor_message
 5F 63 68 61 72 61 63 74 65 72 5F 64 69 73 70 6C _character_displ
 61 79 5F 74 69 6D 65 5F 63 6F 65 66 66 69 63 69 ay_time_coeffici
 65 6E 74 00 30 2E 30 37 00 5F 74 75 74 6F 72 5F ent.0.07._tutor_
 6D 65 73 73 61 67 65 5F 6D 69 6E 69 6D 75 6D 5F message_minimum_
 64 69 73 70 6C 61 79 5F 74 69 6D 65 00 31 00 5F display_time.1._
 74 75 74 6F 72 5F 6D 65 73 73 61 67 65 5F 72 65 tutor_message_re
 70 65 61 74 73 00 35 00 5F 74 75 74 6F 72 5F 76 peats.5._tutor_v
 69 65 77 5F 64 69 73 74 61 6E 63 65 00 31 30 30 iew_distance.100
 30 00 61 6C 6C 6F 77 5F 73 70 65 63 74 61 74 6F 0.allow_spectato
 72 73 00 31 00 61 6D 78 5F 63 6C 69 65 6E 74 5F rs.1.amx_client_
 6C 61 6E 67 75 61 67 65 73 00 31 00 61 6D 78 5F languages.1.amx_
 6C 61 6E 67 75 61 67 65 00 66 72 00 61 6D 78 5F language.fr.amx_
 6E 65 78 74 6D 61 70 00 64 65 5F 61 7A 74 65 63 nextmap.de_aztec
 00 61 6D 78 5F 74 69 6D 65 6C 65 66 74 00 30 30 .amx_timeleft.00
 3A 30 30 00 61 6D 78 6D 6F 64 78 5F 76 65 72 73 :00.amxmodx_vers
 69 6F 6E 00 31 2E 37 36 64 00 63 6F 6F 70 00 30 ion.1.76d.coop.0
 00 63 73 64 6D 5F 61 63 74 69 76 65 00 31 00 63 .csdm_active.1.c
 73 64 6D 5F 76 65 72 73 69 6F 6E 00 32 2E 31 00 sdm_version.2.1.
 64 65 61 74 68 6D 61 74 63 68 00 31 00 64 65 63 deathmatch.1.dec
 61 6C 66 72 65 71 75 65 6E 63 79 00 36 30 00 65 alfrequency.60.e
 64 67 65 66 72 69 63 74 69 6F 6E 00 32 00 68 6F dgefriction.2.ho
 73 74 61 67 65 5F 64 65 62 75 67 00 30 00 68 6F stage_debug.0.ho
 73 74 61 67 65 5F 73 74 6F 70 00 30 00 68 75 6D stage_stop.0.hum
 61 6E 73 5F 6A 6F 69 6E 5F 74 65 61 6D 00 61 6E ans_join_team.an
 79 00 6A 74 70 31 30 31 38 31 00 63 68 75 74 65 y.jtp10181.chute
 00 6D 61 78 5F 71 75 65 72 69 65 73 5F 73 65 63 .max_queries_sec
 00 31 00 6D 61 78 5F 71 75 65 72 69 65 73 5F 73 .1.max_queries_s
 65 63 5F 67 6C 6F 62 61 6C 00 31 00 6D 61 78 5F ec_global.1.max_
 71 75 65 72 69 65 73 5F 77 69 6E 64 6F 77 00 31 queries_window.1
 00 6D 65 74 61 6D 6F 64 5F 76 65 72 73 69 6F 6E .metamod_version
 00 31 2E 31 39 00 6D 70 5F 61 6C 6C 6F 77 6D 6F .1.19.mp_allowmo
 6E 73 74 65 72 73 00 30 00 6D 70 5F 61 75 74 6F nsters.0.mp_auto
 6B 69 63 6B 00 30 00 6D 70 5F 61 75 74 6F 74 65 kick.0.mp_autote
 61 6D 62 61 6C 61 6E 63 65 00 30 00 6D 70 5F 62 ambalance.0.mp_b
 75 79 74 69 6D 65 00 39 39 39 39 00 6D 70 5F 63 uytime.9999.mp_c
 34 74 69 6D 65 72 00 33 35 00 6D 70 5F 63 68 61 4timer.35.mp_cha
 74 74 69 6D 65 00 35 00 6D 70 5F 63 6F 6E 73 69 ttime.5.mp_consi
 73 74 65 6E 63 79 00 31 00 6D 70 5F 66 61 64 65 stency.1.mp_fade
 74 6F 62 6C 61 63 6B 00 30 00 6D 70 5F 66 6C 61 toblack.0.mp_fla
 73 68 6C 69 67 68 74 00 31 00 6D 70 5F 66 6F 6F shlight.1.mp_foo
 74 73 74 65 70 73 00 31 00 6D 70 5F 66 6F 72 63 tsteps.1.mp_forc
 65 63 61 6D 65 72 61 00 30 00 6D 70 5F 66 6F 72 ecamera.0.mp_for
 63 65 63 68 61 73 65 63 61 6D 00 30 00 6D 70 5F cechasecam.0.mp_
 66 72 61 67 73 6C 65 66 74 00 30 00 6D 70 5F 66 fragsleft.0.mp_f
 72 65 65 66 6F 72 61 6C 6C 00 30 00 6D 70 5F 66 reeforall.0.mp_f
 72 65 65 7A 65 74 69 6D 65 00 32 00 6D 70 5F 66 reezetime.2.mp_f
 72 69 65 6E 64 6C 79 66 69 72 65 00 30 00 6D 70 riendlyfire.0.mp
 5F 67 68 6F 73 74 66 72 65 71 75 65 6E 63 79 00 _ghostfrequency.
 30 2E 31 00 6D 70 5F 68 6F 73 74 61 67 65 70 65 0.1.mp_hostagepe
 6E 61 6C 74 79 00 31 33 00 6D 70 5F 6B 69 63 6B nalty.13.mp_kick
 70 65 72 63 65 6E 74 00 30 00 6D 70 5F 6C 69 6D percent.0.mp_lim
 69 74 74 65 61 6D 73 00 30 00 6D 70 5F 6C 6F 67 itteams.0.mp_log
 64 65 74 61 69 6C 00 33 00 6D 70 5F 6C 6F 67 66 detail.3.mp_logf
 69 6C 65 00 31 00 6D 70 5F 6C 6F 67 6D 65 73 73 ile.1.mp_logmess
 61 67 65 73 00 31 00 6D 70 5F 6D 61 70 76 6F 74 ages.1.mp_mapvot
 65 72 61 74 69 6F 00 31 00 6D 70 5F 6D 61 78 72 eratio.1.mp_maxr
 6F 75 6E 64 73 00 30 00 6D 70 5F 6D 69 72 72 6F ounds.0.mp_mirro
 72 64 61 6D 61 67 65 00 30 00 6D 70 5F 70 6C 61 rdamage.0.mp_pla
 79 65 72 69 64 00 30 00 6D 70 5F 72 6F 75 6E 64 yerid.0.mp_round
 74 69 6D 65 00 33 00 6D 70 5F 73 74 61 72 74 6D time.3.mp_startm
 6F 6E 65 79 00 38 30 30 00 6D 70 5F 74 69 6D 65 oney.800.mp_time
 6C 65 66 74 00 30 00 6D 70 5F 74 69 6D 65 6C 69 left.0.mp_timeli
 6D 69 74 00 30 00 6D 70 5F 74 6B 70 75 6E 69 73 mit.0.mp_tkpunis
 68 00 30 00 6D 70 5F 77 69 6E 64 69 66 66 65 72 h.0.mp_windiffer
 65 6E 63 65 00 31 00 6D 70 5F 77 69 6E 6C 69 6D ence.1.mp_winlim
 69 74 00 30 00 70 61 75 73 61 62 6C 65 00 31 00 it.0.pausable.1.
 73 76 5F 61 63 63 65 6C 65 72 61 74 65 00 35 00 sv_accelerate.5.
 73 76 5F 61 69 6D 00 30 00 73 76 5F 61 69 72 61 sv_aim.0.sv_aira
 63 63 65 6C 65 72 61 74 65 00 31 30 30 00 73 76 ccelerate.100.sv
 5F 61 69 72 6D 6F 76 65 00 31 00 73 76 5F 61 6C _airmove.1.sv_al
 6C 6F 77 75 70 6C 6F 61 64 00 31 00 73 76 5F 61 lowupload.1.sv_a
 6C 6C 74 61 6C 6B 00 31 00 73 76 5F 62 6F 75 6E lltalk.1.sv_boun
 63 65 00 31 00 73 76 5F 63 68 65 61 74 73 00 30 ce.1.sv_cheats.0
 00 73 76 5F 63 6C 69 65 6E 74 74 72 61 63 65 00 .sv_clienttrace.
 31 00 73 76 5F 63 6C 69 70 6D 6F 64 65 00 30 00 1.sv_clipmode.0.
 73 76 5F 63 6F 6E 74 61 sv_conta
 FE FF FF FF 56 0A 00 00 12 63 74 00 00 73 76 5F þÿÿÿV....ct..sv_
 66 72 69 63 74 69 6F 6E 00 34 00 73 76 5F 67 72 friction.4.sv_gr
 61 76 69 74 79 00 37 35 30 00 73 76 5F 6C 6F 67 avity.750.sv_log
 62 6C 6F 63 6B 73 00 30 00 73 76 5F 6D 61 78 72 blocks.0.sv_maxr
 61 74 65 00 32 35 30 30 30 00 73 76 5F 6D 61 78 ate.25000.sv_max
 73 70 65 65 64 00 33 32 30 00 73 76 5F 6D 69 6E speed.320.sv_min
 72 61 74 65 00 31 35 30 30 30 00 73 76 5F 70 61 rate.15000.sv_pa
 73 73 77 6F 72 64 00 30 00 73 76 5F 70 72 6F 78 ssword.0.sv_prox
 69 65 73 00 32 00 73 76 5F 72 65 67 69 6F 6E 00 ies.2.sv_region.
 33 00 73 76 5F 72 65 73 74 61 72 74 00 30 00 73 3.sv_restart.0.s
 76 5F 72 65 73 74 61 72 74 72 6F 75 6E 64 00 30 v_restartround.0
 00 73 76 5F 73 74 65 70 73 69 7A 65 00 31 38 00 .sv_stepsize.18.
 73 76 5F 73 74 6F 70 73 70 65 65 64 00 37 35 00 sv_stopspeed.75.
 73 76 5F 75 70 6C 6F 61 64 6D 61 78 00 30 2E 35 sv_uploadmax.0.5
 00 73 76 5F 76 6F 69 63 65 65 6E 61 62 6C 65 00 .sv_voiceenable.
 31 00 73 76 5F 77 61 74 65 72 61 63 63 65 6C 65 1.sv_wateraccele
 72 61 74 65 00 31 30 00 73 76 5F 77 61 74 65 72 rate.10.sv_water
 66 72 69 63 74 69 6F 6E 00 31 00 friction.1.
== A2A_PING ==
Пингование сервера, чтобы узнать, существует ли он. Может быть использован для вычисления задержки на сервере.
=== Пример запроса ===
Данные	Тип	Значение
Header	 	'i' (0x69)
 FF FF FF FF 69 ÿÿÿÿi
=== Формат ответа ===
==== сервер ====
Данные 	Тип	Значение
Header 	 	'j' (0x6A)
Payload	 	Null
 FF FF FF FF 6A 00 ÿÿÿÿj.
==== сервер ====
Данные 	Тип	Значение
Heading	 	'j' (0x6A)
Payload	 	'00000000000000.'
 FF FF FF FF 6A 30 30 30 30 30 30 30 30 30 30 30 ÿÿÿÿj00000000000
 30 30 30 00 000.
== A2S_SERVERQUERY_GETCHALLENGE ==
Запросы A2S_PLAYER и A2S_RULES требуют номера вызова. Раньше этот номер можно было получить с помощью запроса A2S_SERVERQUERY_GETCHALLENGE. В новых играх это больше не работает. Вместо этого, отправьте запросы A2S_PLAYER или A2S_RULES с начальным вызовом -1 (0xFFFFFFFF), чтобы получить используемый номер вызова.
На некоторых движках (подтвержденные AppID: 17510, 17530, 17740, 17550, 17700) она может быть использована. Формат:
=== Пример запроса ===
Данные	Тип	Значение
Header	 	'W' (0x57)
 FF FF FF FF 57 ÿÿÿÿW
=== Формат ответа ===
Данные 	Тип	Комментарий
Header 	 	Должен быть равен 'A' (0x41.)
Challenge	 	Номер вызова для использования
Пример ответа:
 FF FF FF FF 41 4B A1 D5 22 ÿÿÿÿAK¡Õ"
= Реализации =
* Asynchronous Game Query Library Java 8 библиотека асинхронных игровых запросов на основе Netty
* C библиотека
* GameServer Java библиотека
* QueryEd Java библиотека
* Java, PHP, и Ruby библиотеки
* GameDig Javascript (Node.JS) модуль
* Net-SRCDS-Queries Perl модуль
* SRCDSpy Python библиотека
* SourceLib Python библиотека
* python-valve Python библиотека
* valve-range-query Python библиотека для сканирования по диапозону IP
* aQuery VB.NET библиотека
* SourceStats Source Server статистика
* PHP Source Query PHP библиотека
* QueryMaster C# библиотека
* Okolni-SourceEngine-Query C# библиотека
* go-a2s Golang пакет
* a2s-rs Rust библиотека
* Rcon and A2s WebApi Китайская библиотека протокола WebApi, основанная на Spring boot, поддерживается только A2S_INFO и A2S_PLAYER
= Смотрите так же =
* 
*