UT2004 Query Protocol – Practical Reference

This document describes the Unreal Tournament 2004 (UT2004) UDP query protocol as observed from real server responses. It focuses on three key query types: Server Info, Server Rules, and Player List. All examples below are based on actual captured packets and include decoded values for clarity.

Note: All packets shown are sent via UDP to the server’s query port (typically gameport + 1). Hex values are written as space-separated byte pairs, and numeric values are little-endian unless stated otherwise.

Ignored values are likely unknown or unused fields and can be treated as padding or reserved data.

1. Client Query Packets

The client sends small 5-byte packets to request information from the UT2004 server. The first byte is always 0x79, followed by four bytes indicating the query type.

Purpose Hex Packet Description
Server Info 79 00 00 00 00 Requests basic server information such as hostname, map, game type, and player counts.
Server Rules 79 00 00 00 01 Returns key/value pairs describing server settings (mutators, limits, modes, etc.).
Player List (Single Packet) 79 00 00 00 02 Returns a single player list packet.
Player List (Multi‑Packet) 79 00 00 00 03 Returns two packets: rules (0x01) and players (0x02).

2. Common Response Header

All UT2004 query responses begin with a 5-byte header. The first four bytes are a fixed signature 80 00 00 00. The fifth byte indicates the response type.

Response Type Header Hex Meaning
Server Info 80 00 00 00 00 Response to the Server Info query.
Server Rules 80 00 00 00 01 Response to the Server Rules query.
Player List 80 00 00 00 02 Response to the Player List query.

3. Server Info Response (Decoded)

The Server Info response provides hostname, map, game type, and player counts. Below is a captured example with key fields decoded. Length-prefixed strings use: [length][ASCII bytes][00].

80 00 00 00 00
00 00 00 00 00 00
6C 1E 00 00 00 00 00 00
18 47 72 69 6D 6D 73 2D 49 6E 73 74 61 2D 44 65 61 74 68 6D 61 74 63 68 00
10 44 4D 2D 31 6F 6E 31 2D 53 71 75 61 64 65 72 00
0C 78 44 65 61 74 68 4D 61 74 63 68 00
04 00 00 00
0A 00 00 00
00 00 00 00 00 00 00 00 00 00 00 02 30 00 00 00

3.1 Decoded Fields

Field Raw Bytes Decoded Value / Meaning
Header 80 00 00 00 00 Server Info response header.
Unknown block 1 00 00 00 00 00 00 Ignored (likely unknown or unused).
Unknown block 2 6C 1E 00 00 00 00 00 00 Ignored (likely unknown or unused).
Hostname length 18 24 bytes follow for hostname (excluding the null terminator in the count).
Hostname 47 72 69 6D ... 63 68 00 Grimms-Insta-Deathmatch
Map name length 10 16 bytes follow for map name.
Map name 44 4D 2D 31 6F 6E 31 2D 53 71 75 61 64 65 72 00 DM-1on1-Squader
Game type length 0C 12 bytes follow for game type.
Game type 78 44 65 61 74 68 4D 61 74 63 68 00 xDeathMatch
Current players 04 00 00 00 4 players online.
Max players 0A 00 00 00 10 player slots.
Trailing block 00 ... 30 00 00 00 Ignored (likely unknown or unused).

4. Server Rules Response (Decoded)

The Server Rules response returns a list of key/value pairs. Each key and value is stored as a length-prefixed ASCII string followed by a null terminator:

  • 1 byte: length of key
  • N bytes: key
  • 1 byte: 0x00 (null terminator)
  • 1 byte: length of value
  • M bytes: value
  • 1 byte: 0x00 (null terminator)
80 00 00 00 01
0B 53 65 72 76 65 72 4D 6F 64 65 00 0A 64 65 64 69 63 61 74 65 64 00
0A 41 64 6D 69 6E 4E 61 6D 65 00 06 47 72 69 6D 6D 00
0B 41 64 6D 69 6E 45 6D 61 69 6C 00 00
0E 53 65 72 76 65 72 56 65 72 73 69 6F 6E 00 05 33 33 33 39 00
0A 47 61 6D 65 53 74 61 74 73 00 06 46 61 6C 73 65 00
0E 4D 61 78 53 70 65 63 74 61 74 6F 72 73 00 02 32 00
0A 4D 61 70 56 6F 74 69 6E 67 00 05 74 72 75 65 00
0B 4B 69 63 6B 56 6F 74 69 6E 67 00 06 66 61 6C 73 65 00
08 4D 75 74 61 74 6F 72 00 0C 4D 75 74 49 6E 73 74 61 47 69 62 00
0B 4D 69 6E 50 6C 61 79 65 72 73 00 02 34 00
0D 45 6E 64 54 69 6D 65 44 65 6C 61 79 00 05 34 2E 30 30 00
0A 47 6F 61 6C 53 63 6F 72 65 00 03 33 30 00
0A 54 69 6D 65 4C 69 6D 69 74 00 03 31 35 00
0D 54 72 61 6E 73 6C 6F 63 61 74 6F 72 00 06 46 61 6C 73 65 00
0B 57 65 61 70 6F 6E 53 74 61 79 00 06 46 61 6C 73 65 00
0D 46 6F 72 63 65 52 65 73 70 61 77 6E 00 06 46 61 6C 73 65 00
08 6D 75 74 61 74 6F 72 00 0A 44 4D 4D 75 74 61 74 6F 72 00

4.1 Decoded Key/Value Pairs

Key Value
ServerModededicated
AdminNameGrimm
AdminEmail(empty)
ServerVersion3339
GameStatsFalse
MaxSpectators2
MapVotingtrue
KickVotingfalse
MutatorMutInstaGib / DMMutator
MinPlayers4
EndTimeDelay4.00
GoalScore30
TimeLimit15
TranslocatorFalse
WeaponStayFalse

5. Player List Response (Decoded)

The Player List response returns one or more player records. Each record has a fixed structure following the common Player List header.

80 00 00 00 02
07 00 00 00
0B 49 6C 6F 76 65 64 69 63 6B 73 00
1C 00 00 00
00 00 00 00
00 00 00 00

5.1 Player Entry Structure

  • Header (packet): 80 00 00 00 02 (Player List response)
  • 4 bytes: Unknown / skip (ignored)
  • 1 byte: nameLen (name length including null terminator)
  • nameLen bytes: ASCII name followed by 00
  • 4 bytes: Ping (32-bit little-endian)
  • 4 bytes: Score (32-bit little-endian)
  • 4 bytes: Unknown / skip (ignored)

5.2 Decoded Player Example

Field Raw Bytes Decoded Value / Meaning
Header 80 00 00 00 02 Player List response header.
Skip (unknown) 07 00 00 00 Ignored (likely unknown / unused).
Name length 0B 11 bytes including null terminator.
Name 49 6C 6F 76 65 64 69 63 6B 73 00 “Ilovedicks” (null-terminated string, dont ask).
Ping 1C 00 00 00 28 ms (0x1C in little-endian).
Score 00 00 00 00 0 (no score).
Trailing skip 00 00 00 00 Ignored (likely padding / unused).

6. Multi‑Packet Player Query (0x03)

Unreal Tournament 2004 supports a multi‑packet version of the player list query using the packet: 79 00 00 00 03. Unlike the standard single‑packet player query (0x02), this version returns two separate packets. The client must continue reading until the final packet is received.

Note: Multi‑packet responses always end with a packet whose header byte is 0x02. Any earlier packets (usually one) will use header 0x01. Ignored values are likely unknown or unused fields.

6.1 Multi‑Packet Query Request

Purpose Hex Packet Description
Player List (Multi‑Packet) 79 00 00 00 03 Requests the extended multi‑packet player list.

6.2 Response Structure

The server responds with two packets:

  • Packet 1: Header 80 00 00 00 01 — contains server rules (same as 0x01 query)
  • Packet 2: Header 80 00 00 00 02 — contains the actual player list

The client must continue receiving packets until the final header 0x02 is encountered.

6.3 Example Multi‑Packet Response (Captured)

Below is a real multi‑packet response captured from a UT2004 server.

Packet 1 — Rules (Header 0x01)

80 00 00 00 01
0B 53 65 72 76 65 72 4D 6F 64 65 00 0A 64 65 64 69 63 61 74 65 64 00
0A 41 64 6D 69 6E 4E 61 6D 65 00 06 47 72 69 6D 6D 00
0B 41 64 6D 69 6E 45 6D 61 69 6C 00 00
0E 53 65 72 76 65 72 56 65 72 73 69 6F 6E 00 05 33 33 33 39 00
...

Packet 2 — Player List (Header 0x02)

80 00 00 00 02
00 00 00 00
0B 49 6C 6F 76 65 64 69 63 6B 73 00
1C 00 00 00
06 00 00 00
00 00 00 00

6.4 Client Handling Requirements

  • The client must keep reading packets until the final header 0x02 is received.
  • Packet 1 (0x01) contains rules, not players.
  • Packet 2 (0x02) contains the actual player list.
  • Ignored values are likely unknown or unused fields.

This multi‑packet behavior is required for some servers and mods, and must be supported by any UT2004 query tool.

Bottom Left BackgroundBottom Right Background
Grimms 3D worlds
Privacy Overview

This website uses cookies so that we can provide you with the best user experience possible. Cookie information is stored in your browser and performs functions such as recognising you when you return to our website and helping our team to understand which sections of the website you find most interesting and useful.