En SOCKS5-frontend kan använda en HTTP-proxy som sin vidare transport. Den agerar som SOCKS-server mot klienten och som HTTP CONNECT-klient mot föräldern. De två kontrollutbytena avslutas innan applikationsströmmen börjar.

SOCKS CONNECT-förfrågan tillhandahåller redan målvärden eller -adressen och porten. För ett illustrativt HTTP/1.1-utbyte med föräldern:

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

Översätt resultatet vid gränsen

Adaptern utför all autentisering som föräldern kräver och väntar på CONNECT-resultatet. Ett lyckat 2xx-svar upprättar förälderns tunnel. Först därefter bör den returnera motsvarande SOCKS-framgångssvar till klienten nedströms.

Om föräldern avvisar åtgärden skickar du ett definierat SOCKS-felsvar och avslutar sedan klientanslutningen omedelbart. SOCKS5 kräver den stängningen inom tio sekunder efter att felet upptäckts. Behåll förälderns HTTP-status som diagnostisk information för adaptern. Att vidarebefordra den statusraden som applikationsdata skulle placera ett HTTP-kontrollmeddelande i en ström vars klient förväntar sig SOCKS-inramning.

Före ett lyckat CONNECT-resultat talar föräldern fortfarande HTTP, inklusive inramningen av eventuella utmanings- eller felsvar. Efter huvudets avgränsare i ett lyckat resultat blir anslutningen tunneln; det finns ingen HTTP-svarskropp att förbruka först.

Bevara byten efter huvudena

En läsning kan innehålla slutet av förälderns huvuden och byte från målet tillsammans. Bevara dessa extra byte för applikationen nedströms. Protokoll där servern talar först kan hälsa direkt efter att deras anslutning öppnats.

När SOCKS-framgångssvaret har skickats, vidarebefordra applikationsströmmen i båda riktningarna. Adaptern behöver inte växla ett klientmeddelande med ett servermeddelande, och den behöver inte förstå TLS-poster för att vidarebefordra dem. Dess protokollarbete var att upprätta och översätta de två tunnelöverläggningarna.

Relaterade artiklar