DevBlog/drafts/writeup-5-ck3-private-server-part3.md
2025-03-24 18:12:44 +01:00

1.8 KiB

permalink, title, categories, tags, layout, is_draft
permalink title categories tags layout is_draft
/posts/writeups/5 Implementing a CK3 Private Peer-to-Peer Multiplayer Server - Part 2- Implememting a Minimal Server
Write Up
write up
ck3
mitm
reverse engenering
default.liquid true

Implementing a CK3 Private Peer-to-Peer Multiplayer Server - Part 3 - Minimal Intermediary Server

Now that we have an understanding of the architecture, the next step is to create our server emulator by building a minimal server that simply forwards requests to and from the real server.

This will allow us to begin implementing our logic by simulating the requests sent to the server with our own implementation and comparing them to the normal execution.

Eventually, once we're confident that the simulated requests are accurate, we will switch to our own logic and stop forwarding requests. By that point, we hope our server emulator will be robust enough to function properly.

MITM redirection to localhost

To redirect the requests we the MITM proxies describe Part 2 but with script the redirect he request of the multiplayer to to our own server running on localhost on port 3030.

from mitmproxy import ctx
import mitmproxy.http


class LocalRedirect:

    def __init__(self):
        print("Loaded redirect addon")

    def request(self, flow: mitmproxy.http.HTTPFlow):
        if "ck3-new.online.paradox-interactive.com" in flow.request.pretty_host and "/ws" in flow.request.url:
            ctx.log.info(f"pretty host is: %s" % flow.request.pretty_host)
            ctx.log.info(f"url: %s" % flow.request.url)
            flow.request.host = "localhost"
            flow.request.port = 3030
            flow.request.scheme = "http"


addons = [LocalRedirect()]

Server implementation

For server implenent we choose to implent it in rust using wrap,