Ein SOCKS5-Frontend kann einen HTTP-Proxy als weiterführenden Transport nutzen. Es tritt gegenüber dem Client als SOCKS-Server und gegenüber dem Parent als HTTP-CONNECT-Client auf. Beide Kontroll-Austausche enden, bevor der Anwendungsstrom beginnt.

Die SOCKS-CONNECT-Anfrage liefert bereits Zielhost bzw. -adresse und Port. Für einen beispielhaften HTTP/1.1-Austausch mit dem Parent:

client → adapter: SOCKS5 CONNECT service.example.net:443
adapter → parent:
    CONNECT service.example.net:443 HTTP/1.1
    Host: service.example.net:443

parent → adapter: HTTP/1.1 200 Connection Established
                 [end of headers]
adapter → client: SOCKS5 success reply

client ↔ adapter ↔ parent ↔ service: application bytes

Das Ergebnis an der Grenze übersetzen

Der Adapter erledigt jede erforderliche Authentifizierung beim Parent und wartet auf das CONNECT-Ergebnis. Eine erfolgreiche 2xx-Antwort errichtet den Parent-Tunnel. Erst dann sollte er die entsprechende SOCKS-Erfolgsantwort an den nachgelagerten Client zurücksenden.

Lehnt der Parent den Vorgang ab, senden Sie eine definierte SOCKS-Fehlerantwort und beenden Sie danach die Client-Verbindung umgehend. SOCKS5 verlangt diesen Abschluss innerhalb von zehn Sekunden nach Erkennen des Fehlers. Behalten Sie den HTTP-Status des Parents als Diagnoseinformation für den Adapter. Würde man diese Statuszeile als Anwendungsdaten weiterleiten, gelangte eine HTTP-Kontrollnachricht in einen Strom, dessen Client SOCKS-Rahmung erwartet.

Vor einem erfolgreichen CONNECT-Ergebnis spricht der Parent noch HTTP, einschließlich der Rahmung jeder Challenge- oder Fehlerantwort. Nach dem Header-Trennzeichen eines erfolgreichen Ergebnisses wird die Verbindung zum Tunnel; es gibt keinen HTTP-Antwortkörper, der zuerst verbraucht werden müsste.

Die Bytes nach den Headern bewahren

Ein Lesevorgang kann das Ende der Parent-Header und Bytes vom Ziel gemeinsam enthalten. Bewahren Sie diese zusätzlichen Bytes für die nachgelagerte Anwendung. Server-First-Protokolle können sofort nach dem Öffnen ihrer Verbindung grüßen.

Nachdem die SOCKS-Erfolgsantwort gesendet wurde, leiten Sie den Anwendungsstrom in beide Richtungen weiter. Der Adapter muss nicht eine Client-Nachricht mit einer Server-Nachricht abwechseln und muss TLS-Records nicht verstehen, um sie weiterzuleiten. Seine Protokollarbeit war das Herstellen und Übersetzen der beiden Tunnelaushandlungen.

Ähnliche Artikel