Login Packet

From wowdev
Jump to navigation Jump to search

Login packets are packets sent by the client to the authentication server as the first connection to the server infrastructure.

All packets start with an opcode field but do not use the same values as the World Packets. The only packets that can start a connection are CMD_AUTH_LOGON_CHALLENGE Client and CMD_AUTH_RECONNECT_CHALLENGE Client which share packet layout.

There are minor differences in the packets between WoW versions, but the layout seems to be stable around BC and later.

The login packets are internally referred to as grunt and the packet layouts hint at it being planned for use for games other than WoW.

The client always sends the first packet in a category, and the server responds with a packet from the same category. So the client would send a CMD_AUTH_LOGON_CHALLENGE_Client and the server would respond with a CMD_AUTH_LOGON_CHALLENGE_Server.

The names here are used internally in the clients.

See Login for a higher level overview of the login process.

Result values signal the result of server operations.

Security flags are used ≥ BC.

Overview

State machine diagram of the packets and where they fit into the login process. The optimal login path has been highlighted in green.

The client initiates a TCP connection to the server on either the default port of 3724, or a port specified in the Realmlist.wtf file. The exchange is then:

  1. Client sends a CMD_AUTH_LOGON_CHALLENGE_Client containing the username and version information.
  2. Server responds with a CMD_AUTH_LOGON_CHALLENGE_Server containing either authentication values or a failure code.
  3. Client performs authentication calculations and sends a CMD_AUTH_LOGON_PROOF_Client.
  4. Server performs calculations and returns a CMD_AUTH_LOGON_PROOF_Server with either a server proof or a failure code
  5. Client requests a realm list with CMD_REALM_LIST_Client and the server responds with CMD_REALM_LIST_Server.
  6. Client selects a server and opens a TCP connection to the Realm Server on either the default port of 8085, or the port specified in the realm list. The client keeps the connection alive to the authentication server.
  7. Realm Server sends the SMSG_AUTH_CHALLENGE World Packet to the client and continues with realm server authentication.

Opcodes and packets

Opcodes
Name Value Description Client Link Server Link
Authentication
CMD_AUTH_LOGON_CHALLENGE 0x00 Intial information sent by client and then challenge by server. Client Server
CMD_AUTH_LOGON_PROOF 0x01 Proof sent by client and then server. Client Server
CMD_AUTH_RECONNECT_CHALLENGE 0x02 Reconnect challenge sent by client and then server. Client Server
CMD_AUTH_RECONNECT_PROOF 0x03 Reconnect proof sent by client and then server. Client Server
Miscellaneous
CMD_SURVEY_RESULT 0x04 Used for hardware survey. Client -
Realmlist
CMD_REALM_LIST 0x10 Realmlist request sent by client and realmlist information sent by server. Client Server
Patching
CMD_XFER_INITIATE 0x30 Sent by server when it wants to send data. - Server
CMD_XFER_DATA 0x31 Data sent by the server. - Server
CMD_XFER_ACCEPT 0x32 Sent by client after getting an CMD_XFER_INITIATE from the server. Client -
CMD_XFER_RESUME 0x33 Sent by client that already has part of the data the server wants to send. Client -
CMD_XFER_CANCEL 0x34 Sent by client that wishes to gracefully close the connection. Client -