Difference between revisions of "MK8 Network Protocol"

From MK8
Jump to navigation Jump to search
Line 1: Line 1:
 
This page describes the '''network protocol''' used by Mario Kart 8. It is very incomplete at this moment.
 
This page describes the '''network protocol''' used by Mario Kart 8. It is very incomplete at this moment.
 
{{textbox|red center|In Progress|This article is managed by [[Leseratte]] and will grow slowly. Feel free to edit typos and grammatical or speech issues. If you have additional information, please complete this page.}}
 
  
 
__TOC__
 
__TOC__

Revision as of 05:50, 25 September 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. 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