Wenn Socket.Connect() auf einen SOCKS-Server zeigt, wird eine TCP-Verbindung zu diesem Server geöffnet. Die nächsten Bytes müssen dennoch SOCKS sprechen. Wer sofort das Protokoll der Anwendung sendet, lässt den Server auf ein anderes Gespräch warten.

Bei SOCKS5 umfasst der Verbindungsaufbau die Methodenaushandlung, einen gegebenenfalls gewählten Authentifizierungsaustausch und eine Anfrage, die das Ziel benennt. Erst eine erfolgreiche Antwort öffnet den Weg für die Bytes der Anwendung. Diese Schritte sind in RFC 1928 definiert.

Die Aushandlung gehört in die Verbindungsschicht

Eine Anwendung mit eigenem TCP-Protokoll kann einen proxyfähigen Connector verwenden, der einen aufgebauten Stream zurückgibt. Der Rest der Anwendung liest und schreibt dann über diesen Stream. Ein Connector muss teilweise Lesevorgänge, unterschiedlich lange Adressen, Authentifizierungsfehler und eine Frist für die Aushandlung berücksichtigen.

Eine handgeschriebene Implementierung, die einen Puffer fester Größe liest und Erfolg annimmt, ist zerbrechlich. TCP bewahrt die Grenzen der SOCKS-Nachrichten nicht. Lies die vollständige Antwort, die durch ihren Adresstyp beschrieben wird, bevor das Anwendungsprotokoll beginnt. Ein .NET 7+ CONNECT-Antwortleser veranschaulicht diesen Schritt.

Wenn eine gepflegte Bibliothek diese Verbindungsschicht bereits bereitstellt, prüfe ihre unterstützten SOCKS-Versionen, Authentifizierungsmethoden und ihr Zielframework. Ein zehn Jahre alter Forumslink ist ein Ausgangspunkt für die Untersuchung und kein Beleg für aktuelle Kompatibilität.

Die HTTP-Client-Konfiguration hat einen eigenen Geltungsbereich

Die Proxy-Einstellung eines HTTP-Clients konfiguriert diesen HTTP-Client. Sie verändert nicht jeden rohen Socket im Prozess. Die Socket-API nimmt einen Netzwerkendpunkt entgegen und überlässt die Aushandlung auf höherer Ebene dem Aufrufer.

Bei einem verschlüsselten Anwendungsprotokoll führe dessen TLS-Handshake durch, nachdem der Proxy-Tunnel aufgebaut ist. Prüfe in diesem Schritt die Identität des beabsichtigten Ziels. Proxy-Authentifizierung und Ziel-Authentifizierung bleiben getrennt, obwohl sie denselben zugrunde liegenden Stream nutzen.

Ähnliche Artikel