Scramjet Proxy Work
Scramjet (by MercuryWorkshop) is a modern, interception-based web proxy designed primarily to bypass internet censorship and enterprise web filters. It is widely considered a faster, more secure successor to the popular Ultraviolet proxy. Key Performance & Features
Modern Architecture: Built using a service worker-based architecture, Scramjet intercepts and rewrites network requests in real-time, allowing it to function as a powerful middleware for web applications.
High Site Compatibility: It supports major platforms including YouTube, Discord, Reddit, Instagram, Spotify, and GeForce NOW.
CAPTCHA Support: Unlike many basic proxies, Scramjet includes built-in support for CAPTCHAs, which is essential for logging into Google and other high-security sites. scramjet proxy work
Speed & Efficiency: Users report it is significantly faster than older solutions, with optimized WASM-based rewriting to ensure smooth page loads. Use Cases
School/Work Unblocking: Specifically optimized to evade school filters and enterprise-level browser restrictions.
Privacy-Focused Apps: Developers use the Scramjet API to build custom, privacy-centric web browsers or applications. The proxy remains in the data path but
Self-Hosting: It is designed to be easily deployable, with a Scramjet-App demo available for those who want to set up their own instance. Things to Consider
Development Stage: While highly advanced, it is still considered "experimental." Some users have reported issues with specific sites like Instagram or Facebook logins on mobile browsers.
Hosting Requirements: For features like YouTube and CAPTCHAs to work reliably, it is recommended not to host it on common datacenter IPs, which are often pre-blocked by those services. Summary Comparison Feature Ultraviolet (Older) Performance High (WASM Optimized) Compatibility Broad (Modern Web APIs) Limited for newer scripts Complexity Developer-friendly API Can be clunky to integrate Status Active development Frequently targeted/blocked Introduction to Scramjet - Mintlify or dynamic routing).
5. Example Flow Diagram (HTTP over TCP)
[Client]
|
| (SYN)
v
[Scramjet Proxy] --accept--> (new fd)
|
| read(partial request) -> parse dest
|
| connect() to upstream
|
| splice(client_fd, upstream_fd) [zero-copy]
|
v
[Upstream]
|
| splice(upstream_fd, client_fd)
v
[Client]
The proxy remains in the data path but does not store the HTTP body in RAM at any point.
2. Massive Web Scraping Operations
When scraping thousands of product pages per second, rotating IPs via a proxy list is slow. Scramjet Proxy maintains a warm pool of egress IPs (residential or datacenter) and seamlessly rotates flows. Because it is flow-based, a target website sees each request coming from a different IP without the proxy renegotiating TLS for every request.
3.2. Instance Management
- Hot-Reloading: If a Sequence is stopped or restarted, the Proxy routing table must update immediately to prevent traffic loss (502 errors) or misrouting.
- Port Binding: The proxy should allow multiple sequences to run on a single public port (multiplexing) rather than assigning random ports to every instance.
3.3 Flow Control & Backpressure
To avoid memory bloat, the scramjet proxy implements socket-level backpressure:
- If the upstream socket’s send buffer is full, the proxy stops reading from the client (via
EPOLLETorTCP_CORK). - If the client socket is slow, reads from upstream are paused.
This ensures no buffer grows beyond a configured high-water mark (e.g., 64KB).
2. User Stories
- As a Data Scientist, I want to expose my running Python script as an HTTP endpoint so that external systems can send data to it for processing.
- As a Platform Admin, I want to ensure that traffic is only routed to sequences that have explicitly enabled web access, ensuring security.
- As a Developer, I want to define a custom URL path (e.g.,
/my-api/v1) for my sequence so that I can structure my API logic intuitively.
3.1 Client → Scramjet Proxy
- Client initiates TCP connection to the proxy’s listening port.
- Proxy accepts and immediately registers the socket in the event loop.
- First read pulls only enough bytes to parse the HTTP method, host, and path (for HTTP proxying) or the SOCKS header.
- Proxy determines upstream destination (via config, SNI, or dynamic routing).