Login Packet
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 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 at ≥ and afterwards.
Overview
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:
- Client sends a CMD_AUTH_LOGON_CHALLENGE_Client containing the username and version information.
- Server responds with a CMD_AUTH_LOGON_CHALLENGE_Server containing either authentication values or a failure code.
- Client performs authentication calculations and sends a CMD_AUTH_LOGON_PROOF_Client.
- Server performs calculations and returns a CMD_AUTH_LOGON_PROOF_Server with either a server proof or a failure code
- Client requests a realm list with CMD_REALM_LIST_Client and the server responds with CMD_REALM_LIST_Server.
- 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.
- Realm Server sends the SMSG_AUTH_CHALLENGE World Packet to the client and continues with realm server authentication.
Opcodes and packets
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 | Server |
Realmlist | ||||
CMD_REALM_LIST | 0x10 | Realmlist request sent by client and realmlist information sent by server. | Client | Server |
Patching | ||||
CMD_XFER_INITIATE | 0x30 | Used for patching. | Client | Server |
CMD_XFER_DATA | 0x31 | Used for patching. | Client | Server |
CMD_XFER_ACCEPT | 0x32 | Used for patching. | Client | Server |
CMD_XFER_RESUME | 0x33 | Used for patching. | Client | Server |
CMD_XFER_CANCEL | 0x34 | Used for patching. | Client | Server |