Difference between revisions of "MK8 Network Protocol"
Jump to navigation
Jump to search
Line 5: | Line 5: | ||
== General description == | == General description == | ||
− | The [[Mario Kart 8]] traffic starts with a name resolution. | + | 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.72.185.220 | ||
Line 13: | Line 13: | ||
and maybe some more | 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 == | |
− | <pre> | + | <pre>typedef struct udp_header_t |
− | typedef struct | ||
{ | { | ||
− | /*00*/ u32 | + | /*00*/ u32 game_magic; // always 32ab.9864 |
− | /*04*/ | + | /*04*/ u32 unknown_04; // |
− | + | /*08*/ u16 unknown_08; // sequence id? | |
− | /*08*/ u16 | + | /*0a*/ u16 unknown_0a; // sequence id 2 or empty |
− | /*0a*/ u16 | + | /*0c*/ u16 client_slot; // client slot (0 to b) |
− | /*0c*/ u16 | + | /*0e*/ u16 data_length; // little endian, data length without header and checksum |
− | /*0e*/ u16 | + | /*10*/ u32 unknown_10; // ? |
− | /*10*/ u32 | + | /*14*/ u32 unknown_14; // sequence id 3? |
− | /*14*/ | + | /*18*/ u32 unknown_18; // ? |
− | + | /*1c*/ u32 unknown_1c; // always 0x00000000 | |
− | /*18*/ u32 | ||
− | /*1c*/ u32 | ||
− | |||
} | } | ||
+ | __attribute__ ((packed)) udp_header_t; | ||
</pre> | </pre> | ||
− | After the header, there is some data (sometimes empty), and after the data there | + | 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. |
+ | |||
+ | == Record types == | ||
+ | |||
+ | * [[MK8_Network_Protocol/USERINFO|USERINFO]] | ||
[[category:File Format]] | [[category:File Format]] | ||
[[category:Network Protocol|!]] | [[category:Network Protocol|!]] | ||
[[mkw:MKWii Network Protocol]] | [[mkw:MKWii Network Protocol]] |
Revision as of 22:52, 26 December 2014
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.