MK8 Network Protocol
Jump to navigation
Jump to search
This page describes the network protocol used by Mario Kart 8. It is very incomplete at this moment.
General description
The Mario Kart 8 traffic starts with a name resolution. The loginserver (api-eu.olv.nintendo.net) has multiple IP addresses with a TTL of 60:
- 54.72.185.220
- 54.229.32.160
- 54.246.156.135
- 176.34.135.172
and maybe some more
First the game connects the Nintendoservers, while racing, all WiiUs communicate directly to each other.
All P2P packets have a header, a payload and a checksum
The P2P header
typedef struct udp_header_t { /*00*/ u32 game_magic; // always 32ab.9864 /*04*/ u32 unknown_04; // /*08*/ u16 unknown_08; // sequence id? /*0a*/ u16 unknown_0a; // sequence id 2 or empty /*0c*/ u16 client_slot; // client slot (0 to b) /*0e*/ u16 data_length; // little endian, data length without header and checksum /*10*/ u32 unknown_10; // ? /*14*/ u32 unknown_14; // sequence id 3? /*18*/ u32 unknown_18; // ? /*1c*/ u32 unknown_1c; // always 0x00000000 } __attribute__ ((packed)) udp_header_t;
After the header, there is some data (sometimes empty), and after the data there is a 16-byte-checksum which looks like a MD5 hash.