MK8 Network Protocol

From MK8
Revision as of 05:50, 25 September 2014 by Leseratte (talk | contribs)
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. Other than MKWii, MK8 only looks up one domain (api-eu.olv.nintendo.net) which 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

Maybe the olv-server returns some IPs of the other servers, but it's SSL-encrypted and the server does not listen on HTTP.

First the game connects the Nintendoserver, while racing, all WiiUs communicate directly to each other.

All p2p packets have a header, and most of them have a payload (data) and a checksum

typedef struct p2p_header
{
  /*00*/   u32		id;	        // always 32ab.9864
  /*04*/   u16		unknown_04;	// mostly 0x0100
  /*06*/   u16          unknown_06;     // mostly 0x0000
  /*08*/   u16		sequence_id;	// any upcounting number. Number of answer is one higher than question
  /*0a*/   u16		sequence_id2;   // another sequence number. sometimes empty (0x0000)
  /*0c*/   u16		unknown_0c;
  /*0e*/   u16          length;         // indicates the length of the data part (without header and checksum)
  /*10*/   u32          unknown_10;     // mostly 0x00000000. 
  /*14*/   u16          unknown_14;
  /*16*/   u16          unknown_16
  /*18*/   u32          unknown_18;
  /*1c*/   u32          unknown_1c;     // always 0x00000000
  /*1e*/
}

After the header, there is some data (sometimes empty), and after the data there mostly follows a 16-byte-checksum which looks like a MD5 hash. mkw:MKWii Network Protocol