Repository files navigation

SocketZero iOS Proxy Demo

A minimal iOS app demonstrating a local HTTP/HTTPS proxy for SocketZero.

Parent Project:SocketZero - Zero trust connection utility

Status: 🚧 Proof of Concept - Not production ready

What It Does

  • Runs a local HTTP proxy on localhost:8080
  • Handles CONNECT tunneling for HTTPS (no MITM, just byte forwarding)
  • Shows connection logs in real-time
  • Demonstrates the core concept for SocketZero mobile

How to Test

1. Build & Run in Xcode

  1. Create a new Xcode project:

    • File → New → Project
    • iOS → App
    • Product Name: SocketZeroProxy
    • Interface: SwiftUI
    • Language: Swift
  2. Replace the generated files with these:

    • SocketZeroProxyApp.swift
    • ContentView.swift
    • SocketZeroProxy.swift
  3. Run on iPhone or Simulator (Cmd+R)

2. Configure iOS Proxy

On your iPhone:

  1. Go to Settings
  2. Tap Wi-Fi
  3. Tap (i) next to your connected network
  4. Scroll down to Configure Proxy
  5. Select Manual
  6. Enter:
    • Server:127.0.0.1
    • Port:8080
  7. Tap Save

3. Test It

Plain HTTP:

  • Open Safari
  • Go to http://example.com
  • You'll see the demo response from the proxy

HTTPS:

  • Go to https://example.com
  • The proxy will log the CONNECT request
  • (In this demo, it returns 200 OK but doesn't forward - see notes below)

Check Logs:

  • Return to the SocketZero Proxy app
  • See real-time connection logs at the bottom

What's Missing (For Production)

This is a proof of concept. To make it production-ready for SocketZero:

1. WebSocket to Receiver

Add WebSocket connection to your SocketZero receiver:

privatefunc connectToReceiver(){varrequest=URLRequest(url:URL(string: receiverURL)!)
request.addValue("Bearer \(authToken)", forHTTPHeaderField:"Authorization")letsession=URLSession(configuration:.default)
webSocket = session.webSocketTask(with: request)
webSocket?.resume()receiveMessages()}

2. Forward Requests

In handleCONNECT and handleHTTP, instead of sending demo responses:

// Send request to receiver
letmessage=["type":"tunnel_request","target": target,"data": data.base64EncodedString()]sendWebSocketMessage(message)

3. Pipe Bytes for CONNECT

After 200 Connection Established, pipe encrypted bytes:

connection.receive(...){ data, _, _, _ in
// Send bytes to receiver via WebSocket
self.forwardToReceiver(data)}
// When bytes come back from receiver:
connection.send(content: receiverData,...)

4. Background Persistence

For production, you'd need:

  • Network Extension (VPN capability) for background operation
  • Or accept foreground-only operation

5. OAuth Flow

Add authentication via Universal Links:

// Handle deep link callback
func handleAuthCallback(url:URL){
// Extract token from socketzero://auth/callback?token=...
lettoken=extractToken(from: url)saveToKeychain(token)connectToReceiver()}

Architecture

iOS Safari
↓ (HTTP/CONNECT requests)
Local Proxy (localhost:8080)
↓ (WebSocket - TODO)
SocketZero Receiver
↓
Target Services

Limitations

  • Foreground only - proxy stops when app backgrounds
  • Manual proxy config - user must configure in Settings
  • No receiver integration - demo responses only
  • HTTPS works but doesn't forward - needs WebSocket implementation

Next Steps

  1. Add WebSocket to receiver (reuse Go protocol)
  2. Implement byte forwarding for CONNECT tunnels
  3. Add OAuth flow via Universal Links
  4. Test with real SocketZero receiver
  5. Consider Network Extension for background operation

Files

  • SocketZeroProxyApp.swift - App entry point
  • ContentView.swift - SwiftUI interface
  • SocketZeroProxy.swift - Proxy server implementation

License

Same as SocketZero parent project.


Built by Rocky 🦝 for Danny @ Radius Method

About

iOS proxy demo for SocketZero mobile client - Proof of concept for local HTTP/HTTPS proxy

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

SocketZero iOS Proxy Demo

A minimal iOS app demonstrating a local HTTP/HTTPS proxy for SocketZero.

Parent Project:SocketZero - Zero trust connection utility

Status: 🚧 Proof of Concept - Not production ready

What It Does

  • Runs a local HTTP proxy on localhost:8080
  • Handles CONNECT tunneling for HTTPS (no MITM, just byte forwarding)
  • Shows connection logs in real-time
  • Demonstrates the core concept for SocketZero mobile

How to Test

1. Build & Run in Xcode

  1. Create a new Xcode project:

    • File → New → Project
    • iOS → App
    • Product Name: SocketZeroProxy
    • Interface: SwiftUI
    • Language: Swift
  2. Replace the generated files with these:

    • SocketZeroProxyApp.swift
    • ContentView.swift
    • SocketZeroProxy.swift
  3. Run on iPhone or Simulator (Cmd+R)

2. Configure iOS Proxy

On your iPhone:

  1. Go to Settings
  2. Tap Wi-Fi
  3. Tap (i) next to your connected network
  4. Scroll down to Configure Proxy
  5. Select Manual
  6. Enter:
    • Server:127.0.0.1
    • Port:8080
  7. Tap Save

3. Test It

Plain HTTP:

  • Open Safari
  • Go to http://example.com
  • You'll see the demo response from the proxy

HTTPS:

  • Go to https://example.com
  • The proxy will log the CONNECT request
  • (In this demo, it returns 200 OK but doesn't forward - see notes below)

Check Logs:

  • Return to the SocketZero Proxy app
  • See real-time connection logs at the bottom

What's Missing (For Production)

This is a proof of concept. To make it production-ready for SocketZero:

1. WebSocket to Receiver

Add WebSocket connection to your SocketZero receiver:

privatefunc connectToReceiver(){varrequest=URLRequest(url:URL(string: receiverURL)!)
request.addValue("Bearer \(authToken)", forHTTPHeaderField:"Authorization")letsession=URLSession(configuration:.default)
webSocket = session.webSocketTask(with: request)
webSocket?.resume()receiveMessages()}

2. Forward Requests

In handleCONNECT and handleHTTP, instead of sending demo responses:

// Send request to receiver
letmessage=["type":"tunnel_request","target": target,"data": data.base64EncodedString()]sendWebSocketMessage(message)

3. Pipe Bytes for CONNECT

After 200 Connection Established, pipe encrypted bytes:

connection.receive(...){ data, _, _, _ in
// Send bytes to receiver via WebSocket
self.forwardToReceiver(data)}
// When bytes come back from receiver:
connection.send(content: receiverData,...)

4. Background Persistence

For production, you'd need:

  • Network Extension (VPN capability) for background operation
  • Or accept foreground-only operation

5. OAuth Flow

Add authentication via Universal Links:

// Handle deep link callback
func handleAuthCallback(url:URL){
// Extract token from socketzero://auth/callback?token=...
lettoken=extractToken(from: url)saveToKeychain(token)connectToReceiver()}

Architecture

iOS Safari
↓ (HTTP/CONNECT requests)
Local Proxy (localhost:8080)
↓ (WebSocket - TODO)
SocketZero Receiver
↓
Target Services

Limitations

  • Foreground only - proxy stops when app backgrounds
  • Manual proxy config - user must configure in Settings
  • No receiver integration - demo responses only
  • HTTPS works but doesn't forward - needs WebSocket implementation

Next Steps

  1. Add WebSocket to receiver (reuse Go protocol)
  2. Implement byte forwarding for CONNECT tunnels
  3. Add OAuth flow via Universal Links
  4. Test with real SocketZero receiver
  5. Consider Network Extension for background operation

Files

  • SocketZeroProxyApp.swift - App entry point
  • ContentView.swift - SwiftUI interface
  • SocketZeroProxy.swift - Proxy server implementation

License

Same as SocketZero parent project.


Built by Rocky 🦝 for Danny @ Radius Method

About

iOS proxy demo for SocketZero mobile client - Proof of concept for local HTTP/HTTPS proxy

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SocketZero iOS Proxy Demo

A minimal iOS app demonstrating a local HTTP/HTTPS proxy for SocketZero.

Parent Project:SocketZero - Zero trust connection utility

Status: 🚧 Proof of Concept - Not production ready

What It Does

  • Runs a local HTTP proxy on localhost:8080
  • Handles CONNECT tunneling for HTTPS (no MITM, just byte forwarding)
  • Shows connection logs in real-time
  • Demonstrates the core concept for SocketZero mobile

How to Test

1. Build & Run in Xcode

  1. Create a new Xcode project:

    • File → New → Project
    • iOS → App
    • Product Name: SocketZeroProxy
    • Interface: SwiftUI
    • Language: Swift
  2. Replace the generated files with these:

    • SocketZeroProxyApp.swift
    • ContentView.swift
    • SocketZeroProxy.swift
  3. Run on iPhone or Simulator (Cmd+R)

2. Configure iOS Proxy

On your iPhone:

  1. Go to Settings
  2. Tap Wi-Fi
  3. Tap (i) next to your connected network
  4. Scroll down to Configure Proxy
  5. Select Manual
  6. Enter:
    • Server:127.0.0.1
    • Port:8080
  7. Tap Save

3. Test It

Plain HTTP:

  • Open Safari
  • Go to http://example.com
  • You'll see the demo response from the proxy

HTTPS:

  • Go to https://example.com
  • The proxy will log the CONNECT request
  • (In this demo, it returns 200 OK but doesn't forward - see notes below)

Check Logs:

  • Return to the SocketZero Proxy app
  • See real-time connection logs at the bottom

What's Missing (For Production)

This is a proof of concept. To make it production-ready for SocketZero:

1. WebSocket to Receiver

Add WebSocket connection to your SocketZero receiver:

privatefunc connectToReceiver(){varrequest=URLRequest(url:URL(string: receiverURL)!)
request.addValue("Bearer \(authToken)", forHTTPHeaderField:"Authorization")letsession=URLSession(configuration:.default)
webSocket = session.webSocketTask(with: request)
webSocket?.resume()receiveMessages()}

2. Forward Requests

In handleCONNECT and handleHTTP, instead of sending demo responses:

// Send request to receiver
letmessage=["type":"tunnel_request","target": target,"data": data.base64EncodedString()]sendWebSocketMessage(message)

3. Pipe Bytes for CONNECT

After 200 Connection Established, pipe encrypted bytes:

connection.receive(...){ data, _, _, _ in
// Send bytes to receiver via WebSocket
self.forwardToReceiver(data)}
// When bytes come back from receiver:
connection.send(content: receiverData,...)

4. Background Persistence

For production, you'd need:

  • Network Extension (VPN capability) for background operation
  • Or accept foreground-only operation

5. OAuth Flow

Add authentication via Universal Links:

// Handle deep link callback
func handleAuthCallback(url:URL){
// Extract token from socketzero://auth/callback?token=...
lettoken=extractToken(from: url)saveToKeychain(token)connectToReceiver()}

Architecture

iOS Safari
↓ (HTTP/CONNECT requests)
Local Proxy (localhost:8080)
↓ (WebSocket - TODO)
SocketZero Receiver
↓
Target Services

Limitations

  • Foreground only - proxy stops when app backgrounds
  • Manual proxy config - user must configure in Settings
  • No receiver integration - demo responses only
  • HTTPS works but doesn't forward - needs WebSocket implementation

Next Steps

  1. Add WebSocket to receiver (reuse Go protocol)
  2. Implement byte forwarding for CONNECT tunnels
  3. Add OAuth flow via Universal Links
  4. Test with real SocketZero receiver
  5. Consider Network Extension for background operation

Files

  • SocketZeroProxyApp.swift - App entry point
  • ContentView.swift - SwiftUI interface
  • SocketZeroProxy.swift - Proxy server implementation

License

Same as SocketZero parent project.


Built by Rocky 🦝 for Danny @ Radius Method

About

iOS proxy demo for SocketZero mobile client - Proof of concept for local HTTP/HTTPS proxy

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SocketZero iOS Proxy Demo

A minimal iOS app demonstrating a local HTTP/HTTPS proxy for SocketZero.

Parent Project:SocketZero - Zero trust connection utility

Status: 🚧 Proof of Concept - Not production ready

What It Does

  • Runs a local HTTP proxy on localhost:8080
  • Handles CONNECT tunneling for HTTPS (no MITM, just byte forwarding)
  • Shows connection logs in real-time
  • Demonstrates the core concept for SocketZero mobile

How to Test

1. Build & Run in Xcode

  1. Create a new Xcode project:

    • File → New → Project
    • iOS → App
    • Product Name: SocketZeroProxy
    • Interface: SwiftUI
    • Language: Swift
  2. Replace the generated files with these:

    • SocketZeroProxyApp.swift
    • ContentView.swift
    • SocketZeroProxy.swift
  3. Run on iPhone or Simulator (Cmd+R)

2. Configure iOS Proxy

On your iPhone:

  1. Go to Settings
  2. Tap Wi-Fi
  3. Tap (i) next to your connected network
  4. Scroll down to Configure Proxy
  5. Select Manual
  6. Enter:
    • Server:127.0.0.1
    • Port:8080
  7. Tap Save

3. Test It

Plain HTTP:

  • Open Safari
  • Go to http://example.com
  • You'll see the demo response from the proxy

HTTPS:

  • Go to https://example.com
  • The proxy will log the CONNECT request
  • (In this demo, it returns 200 OK but doesn't forward - see notes below)

Check Logs:

  • Return to the SocketZero Proxy app
  • See real-time connection logs at the bottom

What's Missing (For Production)

This is a proof of concept. To make it production-ready for SocketZero:

1. WebSocket to Receiver

Add WebSocket connection to your SocketZero receiver:

privatefunc connectToReceiver(){varrequest=URLRequest(url:URL(string: receiverURL)!)
request.addValue("Bearer \(authToken)", forHTTPHeaderField:"Authorization")letsession=URLSession(configuration:.default)
webSocket = session.webSocketTask(with: request)
webSocket?.resume()receiveMessages()}

2. Forward Requests

In handleCONNECT and handleHTTP, instead of sending demo responses:

// Send request to receiver
letmessage=["type":"tunnel_request","target": target,"data": data.base64EncodedString()]sendWebSocketMessage(message)

3. Pipe Bytes for CONNECT

After 200 Connection Established, pipe encrypted bytes:

connection.receive(...){ data, _, _, _ in
// Send bytes to receiver via WebSocket
self.forwardToReceiver(data)}
// When bytes come back from receiver:
connection.send(content: receiverData,...)

4. Background Persistence

For production, you'd need:

  • Network Extension (VPN capability) for background operation
  • Or accept foreground-only operation

5. OAuth Flow

Add authentication via Universal Links:

// Handle deep link callback
func handleAuthCallback(url:URL){
// Extract token from socketzero://auth/callback?token=...
lettoken=extractToken(from: url)saveToKeychain(token)connectToReceiver()}

Architecture

iOS Safari
↓ (HTTP/CONNECT requests)
Local Proxy (localhost:8080)
↓ (WebSocket - TODO)
SocketZero Receiver
↓
Target Services

Limitations

  • Foreground only - proxy stops when app backgrounds
  • Manual proxy config - user must configure in Settings
  • No receiver integration - demo responses only
  • HTTPS works but doesn't forward - needs WebSocket implementation

Next Steps

  1. Add WebSocket to receiver (reuse Go protocol)
  2. Implement byte forwarding for CONNECT tunnels
  3. Add OAuth flow via Universal Links
  4. Test with real SocketZero receiver
  5. Consider Network Extension for background operation

Files

  • SocketZeroProxyApp.swift - App entry point
  • ContentView.swift - SwiftUI interface
  • SocketZeroProxy.swift - Proxy server implementation

License

Same as SocketZero parent project.


Built by Rocky 🦝 for Danny @ Radius Method

About

iOS proxy demo for SocketZero mobile client - Proof of concept for local HTTP/HTTPS proxy

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

SocketZero iOS Proxy Demo

A minimal iOS app demonstrating a local HTTP/HTTPS proxy for SocketZero.

Parent Project:SocketZero - Zero trust connection utility

Status: 🚧 Proof of Concept - Not production ready

What It Does

  • Runs a local HTTP proxy on localhost:8080
  • Handles CONNECT tunneling for HTTPS (no MITM, just byte forwarding)
  • Shows connection logs in real-time
  • Demonstrates the core concept for SocketZero mobile

How to Test

1. Build & Run in Xcode

  1. Create a new Xcode project:

    • File → New → Project
    • iOS → App
    • Product Name: SocketZeroProxy
    • Interface: SwiftUI
    • Language: Swift
  2. Replace the generated files with these:

    • SocketZeroProxyApp.swift
    • ContentView.swift
    • SocketZeroProxy.swift
  3. Run on iPhone or Simulator (Cmd+R)

2. Configure iOS Proxy

On your iPhone:

  1. Go to Settings
  2. Tap Wi-Fi
  3. Tap (i) next to your connected network
  4. Scroll down to Configure Proxy
  5. Select Manual
  6. Enter:
    • Server:127.0.0.1
    • Port:8080
  7. Tap Save

3. Test It

Plain HTTP:

  • Open Safari
  • Go to http://example.com
  • You'll see the demo response from the proxy

HTTPS:

  • Go to https://example.com
  • The proxy will log the CONNECT request
  • (In this demo, it returns 200 OK but doesn't forward - see notes below)

Check Logs:

  • Return to the SocketZero Proxy app
  • See real-time connection logs at the bottom

What's Missing (For Production)

This is a proof of concept. To make it production-ready for SocketZero:

1. WebSocket to Receiver

Add WebSocket connection to your SocketZero receiver:

privatefunc connectToReceiver(){varrequest=URLRequest(url:URL(string: receiverURL)!)
request.addValue("Bearer \(authToken)", forHTTPHeaderField:"Authorization")letsession=URLSession(configuration:.default)
webSocket = session.webSocketTask(with: request)
webSocket?.resume()receiveMessages()}

2. Forward Requests

In handleCONNECT and handleHTTP, instead of sending demo responses:

// Send request to receiver
letmessage=["type":"tunnel_request","target": target,"data": data.base64EncodedString()]sendWebSocketMessage(message)

3. Pipe Bytes for CONNECT

After 200 Connection Established, pipe encrypted bytes:

connection.receive(...){ data, _, _, _ in
// Send bytes to receiver via WebSocket
self.forwardToReceiver(data)}
// When bytes come back from receiver:
connection.send(content: receiverData,...)

4. Background Persistence

For production, you'd need:

  • Network Extension (VPN capability) for background operation
  • Or accept foreground-only operation

5. OAuth Flow

Add authentication via Universal Links:

// Handle deep link callback
func handleAuthCallback(url:URL){
// Extract token from socketzero://auth/callback?token=...
lettoken=extractToken(from: url)saveToKeychain(token)connectToReceiver()}

Architecture

iOS Safari
↓ (HTTP/CONNECT requests)
Local Proxy (localhost:8080)
↓ (WebSocket - TODO)
SocketZero Receiver
↓
Target Services

Limitations

  • Foreground only - proxy stops when app backgrounds
  • Manual proxy config - user must configure in Settings
  • No receiver integration - demo responses only
  • HTTPS works but doesn't forward - needs WebSocket implementation

Next Steps

  1. Add WebSocket to receiver (reuse Go protocol)
  2. Implement byte forwarding for CONNECT tunnels
  3. Add OAuth flow via Universal Links
  4. Test with real SocketZero receiver
  5. Consider Network Extension for background operation

Files

  • SocketZeroProxyApp.swift - App entry point
  • ContentView.swift - SwiftUI interface
  • SocketZeroProxy.swift - Proxy server implementation

License

Same as SocketZero parent project.


Built by Rocky 🦝 for Danny @ Radius Method

About

iOS proxy demo for SocketZero mobile client - Proof of concept for local HTTP/HTTPS proxy

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SocketZero iOS Proxy Demo

A minimal iOS app demonstrating a local HTTP/HTTPS proxy for SocketZero.

Parent Project:SocketZero - Zero trust connection utility

Status: 🚧 Proof of Concept - Not production ready

What It Does

  • Runs a local HTTP proxy on localhost:8080
  • Handles CONNECT tunneling for HTTPS (no MITM, just byte forwarding)
  • Shows connection logs in real-time
  • Demonstrates the core concept for SocketZero mobile

How to Test

1. Build & Run in Xcode

  1. Create a new Xcode project:

    • File → New → Project
    • iOS → App
    • Product Name: SocketZeroProxy
    • Interface: SwiftUI
    • Language: Swift
  2. Replace the generated files with these:

    • SocketZeroProxyApp.swift
    • ContentView.swift
    • SocketZeroProxy.swift
  3. Run on iPhone or Simulator (Cmd+R)

2. Configure iOS Proxy

On your iPhone:

  1. Go to Settings
  2. Tap Wi-Fi
  3. Tap (i) next to your connected network
  4. Scroll down to Configure Proxy
  5. Select Manual
  6. Enter:
    • Server:127.0.0.1
    • Port:8080
  7. Tap Save

3. Test It

Plain HTTP:

  • Open Safari
  • Go to http://example.com
  • You'll see the demo response from the proxy

HTTPS:

  • Go to https://example.com
  • The proxy will log the CONNECT request
  • (In this demo, it returns 200 OK but doesn't forward - see notes below)

Check Logs:

  • Return to the SocketZero Proxy app
  • See real-time connection logs at the bottom

What's Missing (For Production)

This is a proof of concept. To make it production-ready for SocketZero:

1. WebSocket to Receiver

Add WebSocket connection to your SocketZero receiver:

privatefunc connectToReceiver(){varrequest=URLRequest(url:URL(string: receiverURL)!)
request.addValue("Bearer \(authToken)", forHTTPHeaderField:"Authorization")letsession=URLSession(configuration:.default)
webSocket = session.webSocketTask(with: request)
webSocket?.resume()receiveMessages()}

2. Forward Requests

In handleCONNECT and handleHTTP, instead of sending demo responses:

// Send request to receiver
letmessage=["type":"tunnel_request","target": target,"data": data.base64EncodedString()]sendWebSocketMessage(message)

3. Pipe Bytes for CONNECT

After 200 Connection Established, pipe encrypted bytes:

connection.receive(...){ data, _, _, _ in
// Send bytes to receiver via WebSocket
self.forwardToReceiver(data)}
// When bytes come back from receiver:
connection.send(content: receiverData,...)

4. Background Persistence

For production, you'd need:

  • Network Extension (VPN capability) for background operation
  • Or accept foreground-only operation

5. OAuth Flow

Add authentication via Universal Links:

// Handle deep link callback
func handleAuthCallback(url:URL){
// Extract token from socketzero://auth/callback?token=...
lettoken=extractToken(from: url)saveToKeychain(token)connectToReceiver()}

Architecture

iOS Safari
↓ (HTTP/CONNECT requests)
Local Proxy (localhost:8080)
↓ (WebSocket - TODO)
SocketZero Receiver
↓
Target Services

Limitations

  • Foreground only - proxy stops when app backgrounds
  • Manual proxy config - user must configure in Settings
  • No receiver integration - demo responses only
  • HTTPS works but doesn't forward - needs WebSocket implementation

Next Steps

  1. Add WebSocket to receiver (reuse Go protocol)
  2. Implement byte forwarding for CONNECT tunnels
  3. Add OAuth flow via Universal Links
  4. Test with real SocketZero receiver
  5. Consider Network Extension for background operation

Files

  • SocketZeroProxyApp.swift - App entry point
  • ContentView.swift - SwiftUI interface
  • SocketZeroProxy.swift - Proxy server implementation

License

Same as SocketZero parent project.


Built by Rocky 🦝 for Danny @ Radius Method

About

iOS proxy demo for SocketZero mobile client - Proof of concept for local HTTP/HTTPS proxy

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

SocketZero iOS Proxy Demo

A minimal iOS app demonstrating a local HTTP/HTTPS proxy for SocketZero.

Parent Project:SocketZero - Zero trust connection utility

Status: 🚧 Proof of Concept - Not production ready

What It Does

  • Runs a local HTTP proxy on localhost:8080
  • Handles CONNECT tunneling for HTTPS (no MITM, just byte forwarding)
  • Shows connection logs in real-time
  • Demonstrates the core concept for SocketZero mobile

How to Test

1. Build & Run in Xcode

  1. Create a new Xcode project:

    • File → New → Project
    • iOS → App
    • Product Name: SocketZeroProxy
    • Interface: SwiftUI
    • Language: Swift
  2. Replace the generated files with these:

    • SocketZeroProxyApp.swift
    • ContentView.swift
    • SocketZeroProxy.swift
  3. Run on iPhone or Simulator (Cmd+R)

2. Configure iOS Proxy

On your iPhone:

  1. Go to Settings
  2. Tap Wi-Fi
  3. Tap (i) next to your connected network
  4. Scroll down to Configure Proxy
  5. Select Manual
  6. Enter:
    • Server:127.0.0.1
    • Port:8080
  7. Tap Save

3. Test It

Plain HTTP:

  • Open Safari
  • Go to http://example.com
  • You'll see the demo response from the proxy

HTTPS:

  • Go to https://example.com
  • The proxy will log the CONNECT request
  • (In this demo, it returns 200 OK but doesn't forward - see notes below)

Check Logs:

  • Return to the SocketZero Proxy app
  • See real-time connection logs at the bottom

What's Missing (For Production)

This is a proof of concept. To make it production-ready for SocketZero:

1. WebSocket to Receiver

Add WebSocket connection to your SocketZero receiver:

privatefunc connectToReceiver(){varrequest=URLRequest(url:URL(string: receiverURL)!)
request.addValue("Bearer \(authToken)", forHTTPHeaderField:"Authorization")letsession=URLSession(configuration:.default)
webSocket = session.webSocketTask(with: request)
webSocket?.resume()receiveMessages()}

2. Forward Requests

In handleCONNECT and handleHTTP, instead of sending demo responses:

// Send request to receiver
letmessage=["type":"tunnel_request","target": target,"data": data.base64EncodedString()]sendWebSocketMessage(message)

3. Pipe Bytes for CONNECT

After 200 Connection Established, pipe encrypted bytes:

connection.receive(...){ data, _, _, _ in
// Send bytes to receiver via WebSocket
self.forwardToReceiver(data)}
// When bytes come back from receiver:
connection.send(content: receiverData,...)

4. Background Persistence

For production, you'd need:

  • Network Extension (VPN capability) for background operation
  • Or accept foreground-only operation

5. OAuth Flow

Add authentication via Universal Links:

// Handle deep link callback
func handleAuthCallback(url:URL){
// Extract token from socketzero://auth/callback?token=...
lettoken=extractToken(from: url)saveToKeychain(token)connectToReceiver()}

Architecture

iOS Safari
↓ (HTTP/CONNECT requests)
Local Proxy (localhost:8080)
↓ (WebSocket - TODO)
SocketZero Receiver
↓
Target Services

Limitations

  • Foreground only - proxy stops when app backgrounds
  • Manual proxy config - user must configure in Settings
  • No receiver integration - demo responses only
  • HTTPS works but doesn't forward - needs WebSocket implementation

Next Steps

  1. Add WebSocket to receiver (reuse Go protocol)
  2. Implement byte forwarding for CONNECT tunnels
  3. Add OAuth flow via Universal Links
  4. Test with real SocketZero receiver
  5. Consider Network Extension for background operation

Files

  • SocketZeroProxyApp.swift - App entry point
  • ContentView.swift - SwiftUI interface
  • SocketZeroProxy.swift - Proxy server implementation

License

Same as SocketZero parent project.


Built by Rocky 🦝 for Danny @ Radius Method

About

iOS proxy demo for SocketZero mobile client - Proof of concept for local HTTP/HTTPS proxy

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

SocketZero iOS Proxy Demo

A minimal iOS app demonstrating a local HTTP/HTTPS proxy for SocketZero.

Parent Project:SocketZero - Zero trust connection utility

Status: 🚧 Proof of Concept - Not production ready

What It Does

  • Runs a local HTTP proxy on localhost:8080
  • Handles CONNECT tunneling for HTTPS (no MITM, just byte forwarding)
  • Shows connection logs in real-time
  • Demonstrates the core concept for SocketZero mobile

How to Test

1. Build & Run in Xcode

  1. Create a new Xcode project:

    • File → New → Project
    • iOS → App
    • Product Name: SocketZeroProxy
    • Interface: SwiftUI
    • Language: Swift
  2. Replace the generated files with these:

    • SocketZeroProxyApp.swift
    • ContentView.swift
    • SocketZeroProxy.swift
  3. Run on iPhone or Simulator (Cmd+R)

2. Configure iOS Proxy

On your iPhone:

  1. Go to Settings
  2. Tap Wi-Fi
  3. Tap (i) next to your connected network
  4. Scroll down to Configure Proxy
  5. Select Manual
  6. Enter:
    • Server:127.0.0.1
    • Port:8080
  7. Tap Save

3. Test It

Plain HTTP:

  • Open Safari
  • Go to http://example.com
  • You'll see the demo response from the proxy

HTTPS:

  • Go to https://example.com
  • The proxy will log the CONNECT request
  • (In this demo, it returns 200 OK but doesn't forward - see notes below)

Check Logs:

  • Return to the SocketZero Proxy app
  • See real-time connection logs at the bottom

What's Missing (For Production)

This is a proof of concept. To make it production-ready for SocketZero:

1. WebSocket to Receiver

Add WebSocket connection to your SocketZero receiver:

privatefunc connectToReceiver(){varrequest=URLRequest(url:URL(string: receiverURL)!)
request.addValue("Bearer \(authToken)", forHTTPHeaderField:"Authorization")letsession=URLSession(configuration:.default)
webSocket = session.webSocketTask(with: request)
webSocket?.resume()receiveMessages()}

2. Forward Requests

In handleCONNECT and handleHTTP, instead of sending demo responses:

// Send request to receiver
letmessage=["type":"tunnel_request","target": target,"data": data.base64EncodedString()]sendWebSocketMessage(message)

3. Pipe Bytes for CONNECT

After 200 Connection Established, pipe encrypted bytes:

connection.receive(...){ data, _, _, _ in
// Send bytes to receiver via WebSocket
self.forwardToReceiver(data)}
// When bytes come back from receiver:
connection.send(content: receiverData,...)

4. Background Persistence

For production, you'd need:

  • Network Extension (VPN capability) for background operation
  • Or accept foreground-only operation

5. OAuth Flow

Add authentication via Universal Links:

// Handle deep link callback
func handleAuthCallback(url:URL){
// Extract token from socketzero://auth/callback?token=...
lettoken=extractToken(from: url)saveToKeychain(token)connectToReceiver()}

Architecture

iOS Safari
↓ (HTTP/CONNECT requests)
Local Proxy (localhost:8080)
↓ (WebSocket - TODO)
SocketZero Receiver
↓
Target Services

Limitations

  • Foreground only - proxy stops when app backgrounds
  • Manual proxy config - user must configure in Settings
  • No receiver integration - demo responses only
  • HTTPS works but doesn't forward - needs WebSocket implementation

Next Steps

  1. Add WebSocket to receiver (reuse Go protocol)
  2. Implement byte forwarding for CONNECT tunnels
  3. Add OAuth flow via Universal Links
  4. Test with real SocketZero receiver
  5. Consider Network Extension for background operation

Files

  • SocketZeroProxyApp.swift - App entry point
  • ContentView.swift - SwiftUI interface
  • SocketZeroProxy.swift - Proxy server implementation

License

Same as SocketZero parent project.


Built by Rocky 🦝 for Danny @ Radius Method

About

iOS proxy demo for SocketZero mobile client - Proof of concept for local HTTP/HTTPS proxy

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages