Difference between revisions of "MK8 Network Protocol"

From MK8
Jump to: navigation, search
(Created page with "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 Leser...")
 
Line 41: Line 41:
  
 
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.
 
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.
 +
 +
[[category:File Format]]
 +
[[category:Network Protocol|!]]
 +
[[mkw:MKWii Network Protocol]]

Revision as of 21:31, 17 August 2014

This page describes the network protocol used by Mario Kart 8. It is very incomplete at this moment.

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.

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