Goal: Build a simple HTTP server that can handle GET and POST requests.
- What to Learn:
- Networking with sockets (boost::asio or std::socket).
- HTTP request and response parsing.
- Milestone Output:
- Serve static HTML files from a directory.
- Handle simple dynamic responses (e.g., echoing form data).
- Resources:
- Beej's Guide to Network Programming.
- Boost.Beast HTTP Server Example.
Goal: Build a single-hop proxy that forwards HTTP requests and responses between a client and a remote server.
- What to Learn:
- HTTP forwarding (request parsing, modification, and response forwarding).
- Understanding headers like
Host
andUser-Agent
.
- Milestone Output:
- A client connects to your proxy, which forwards requests to a server and relays responses back to the client.
- Resources:
- Simple Proxy Server in C++ Tutorial.
Goal: Extend the single-hop proxy to create a multi-hop chain (e.g., Proxy A → Proxy B → Destination).
Build your own Multi-Hop proxy. Build and start multiple proxies, and route the trafiic between them for every client request. Also we need to have the encryption to have same behaviour as in Tor Network.
- What to Learn:
- Chain request forwarding across multiple proxy servers.
- Network path building and recursive relaying.
- Milestone Output:
- Route traffic through two or more proxy nodes.
- Resources:
- How Proxies Work.
Goal: Encrypt traffic between proxy nodes to ensure privacy.
- What to Learn:
- Symmetric encryption (AES).
- Public key cryptography (RSA) for key exchange.
- Message signing and verification.
- Milestone Output:
- Proxy nodes decrypt and re-encrypt traffic as it passes through each hop.
- Resources:
- OpenSSL C++ Documentation.
- Cryptography Engineering by Bruce Schneier.
Goal: Build an HTTP server that works as the last hop in your proxy chain.
- What to Learn:
- Handling HTTP requests locally after decryption.
- Serving static files or dynamic content at the final node.
- Milestone Output:
- Multi-hop proxy ends with a custom HTTP server delivering web content.
- Resources:
- HTTP Server and Proxy in C++ (YouTube).
Goal: Build multi-layer encryption for onion routing.
- What to Learn:
- Layered encryption (encrypting data for each hop in the chain).
- Decentralized routing algorithms (e.g., random path selection).
- Milestone Output:
- A client sends data encrypted for each node in the chain. Nodes decrypt and forward the traffic.
- Resources:
- How Onion Routing Works.
Goal: Build a client application that connects to the proxy chain and can browse anonymously.
- What to Learn:
- SOCKS5 proxy protocol for anonymized connections.
- Custom client design to interface with your proxy.
- Milestone Output:
- A client can connect to your proxy, browse websites, and hide its IP address.
- Resources:
- SOCKS5 Proxy Protocol Guide.
Goal: Improve the performance and scalability of your proxy and HTTP server.
- What to Learn:
- Thread pools for concurrent connections.
- Caching strategies to reduce network load.
- Milestone Output:
- Handle thousands of requests concurrently with low latency.
- Resources:
- C++ Concurrency in Action by Anthony Williams.
Goal: Make the proxy fault-tolerant and distribute traffic across multiple chains.
- What to Learn:
- Load balancing techniques (e.g., round-robin).
- Node failure detection and recovery.
- Milestone Output:
- A resilient proxy network with automatic failover.
- Resources:
- Designing Data-Intensive Applications by Martin Kleppmann.
Goal: Combine all components into a unified system.
- What to Learn:
- Inter-process communication (IPC) between modules.
- Deploying the proxy network on multiple machines.
- Milestone Output:
- Fully functional multi-hop proxy with an integrated HTTP server and client application.
- Resources:
- Docker for Deployment.
- Tor Protocol Specification.
- Books:
- The C++ Programming Language by Bjarne Stroustrup.
- Effective Modern C++ by Scott Meyers.
- Websites:
- CppReference Documentation.
- Boost Libraries Documentation.