ARK: Survival Evolved Wiki
Register
Advertisement

This page describes how to list all online ARK servers and query them for their current status, just as the in-game server browser does.

Getting server list[]

Official servers and unofficial servers are obtained separately. To get a list of official servers, you must use Ark's Web API. Ark uses Valve's Master Server Query Protocol to obtain a list of unofficial servers.

Querying server info[]

Server info is obtained by using Valve's Server Query Protocol. Descriptions of the protocol fields unmodified (Steam workshop 'plugins' don't count) Ark servers use follow below. Modified Ark servers can of course spoof or change the meaning of any of the fields and add in additional fields.

Info Requests[]

Field Type Description
Protocol Version Byte Ark server protocol version. Currently 17.
Server Name String Name of the Ark server. With unmodified servers, this may include the version number (described below).
Map String The name of the map. The default map is called "TheIsland".
Folder String Always equal to "ark_survival_evolved"
Game String Always equal to "ARK: Survival Evolved"
AppID Short Unused - always equal to 0.
Player Count Byte Number of players currently online.
Max Players Byte Maximum number of players.
Bot Count Byte Unused - always equal to 0.
Server Type Byte 0x64 for a dedicated server, 0x6C for a non-dedicated server.
Platform Byte 0x6C for Linux, 0x6F for Mac, or 0x77 for windows.
Private? Byte 0 for public servers, 1 for private servers. Servers with 1 are not shown.
VAC? Byte 1 unless the server is started with -insecure.
Version String Unused - always equal to "1.0.0.0".
Extra Data Flag (EDF) Byte Bit field describing which additional fields follow (see below). Usually equals 0xB1.
Extra Data Bytes Variable length byte field. See below for format.

So a response from an unmodified server will look something like this (fields are not shown to their correct size):

[A2S Header  ] 49 11 [Server Name ] [Map Name ] 61 72 6B 5F 73 75 72 76 69 76 61
6C 5F 65 76 6F 6C 76 65 64 00 41 52 4B 3A 20 53 75 72 76 69 76 61 6C 20 45 76 6F
6C 76 65 64 00 00 00 [Player Count] [Max Players ] 00 [Server Type ] [Platform ] 
[Private? ] 01 31 2E 30 2E 30 2E 30 00 B1 [Port  ] [SteamID  ] [Keywords ] C3 BE
47 05 00 00 00 00 00

Server Name[]

Unmodified Ark servers limit their server name field to 63 characters. They also append the server version to their server name. The server name and server version are separated by space-dash-space-parens - ( and then the version number can be read until the next right parenthesis or until the end of the string.

Extra Data[]

EDF Mask Field Type Description
0x80 Game Port Short Port number the game server is running on.
0x10 SteamID Long Server owner's SteamID
0x40 SourceTV Port Short Unused
0x40 SourceTV Host String Unused
0x20 Server Variables String See below for format.
0x01 GameID Long Steam GameID. The lower 24 bits always equal 346110.

Server Variables[]

The Variables field is a string that contains an unordered comma separated list of "Key:Value" server parameters. The list should always start with a comma but don't expect one as per the robustness principal. The table below describes the know keys and their observed value type and description, all of which may change at any time. Keys might be case sensitive?

Key Type Value
OWNINGID Integer Actual owner of the server, used in the Steam Socket API.
OWNINGNAME Integer Displayed owner of the server, used in the Steam Socket API.
NUMOPENPUBCONN Integer Number of public player slots available.
P2PADDR Integer Address to connect to using the Steam Socket API.
P2PPORT Integer Port number to connect to using the Steam Socket API.
SESSIONFLAGS Integer Unknown??
ModId_l Integer Unknown? When given, always seems to be equal to zero, even if there are mods installed.

Player Requests[]

Ark servers return some information on the players currently connected upon request.

Field Type Description
Player Count Byte Number of players currently connected.
Player Info Bytes For each player, a player entry is included. See below for format.

Player Entry[]

Field Type Description
Index Byte Unused - always zero.
Name String Name of the player, encoded as UTF-8.
Score Long Unused - always zero.
Duration Float Number of seconds player has been logged in.

Rule Requests[]

Field Type Description
Rule Count Byte Number of rule entries that follow. Bug: do not trust!! Try to parse until end of packet.
Rules Bytes For each rule, a rule entry is included. See below for format.

Rule Entry[]

Server rules are a list of Key:Value strings back to back. The key and value fields are both strings, terminated by a null byte. The rule list also includes the server variables from the server info request, which are not repeated in this table. Just like the server variables in the info request, do not expect any of these to be present, and they may change at any time.

Key Type Description
CUSTOMSERVERNAME_s String The server name (without server version), in all lower case.
DAYTIME_s String The current time of day, normally formatted as ISO 8601 "hh:mm". For SoTF game-modes, starts with either "Lobby: " or "Match: " to indicate whether the server is currently in the lobby or in a match, respectively. Total conversion mods can change this however they like so handling exceptions is a must.
GameMode_s String The UE4 game mode's classname that is currently being played on the server. The vanilla game mode class is named "TestGameMode_C". Since there can only be one active game mode running on a server at a time, this is controlled by the first mod in the server's mod order.
MATCHTIMEOUT_f Decimal Unknown - always seems to be equal to 120.0.
Networking_i 0 / 1 Unknown?? Always seems to be 0.
OFFICIALSERVER_i 0 / 1 1 for an official server, 0 for unofficial server. N.B. Even if the server is has this set to 1, it will not appear as an official server unless it's IP is found in the officialservers.ini file.
SEARCHKEYWORDS_s String Unused - always equal to "Custom"
ServerPassword_b true / false True if the server requires a password to join, otherwise false.
BUILDID Decimal The current version of the server identified by the build id.
SERVERUSESBATTLEYE_b 0 / 1 True if the server has BattlEye anticheat enabled.
ClusterId_s String The name of the cluster if the server is clustered.
LEGACY_i 0 / 1 True if the server is a legacy Official server.
SESSIONISPVE_i 0 / 1 True if the server is PvE
ALLOWDOWNLOADITEMS_i 0 / 1 True if the server allows downloading items from the cloud.
ALLOWDOWNLOADCHARS_i 0 / 1 True if the server allows downloading characters from the cloud.

Ping & Challenge Requests[]

Ark servers do not support either ping requests or challenge requests (they are both considered deprecated now). Challenge requests are handled through info or player list requests. Most other games get server latency by measuring the round trip time of other packets sent and divide by two (not sure how Ark does it)

Advertisement