Připojení socketu TCP v Asio k naslouchajícímu SOCKS5 dokončí jeden krok: TCP spojení s tímto naslouchačem. Nepožaduje, aby se proxy připojila ke konečnému serveru. Pro povolený test veřejného cíle nabízí seznam proxy SOCKS5 kandidáty pro tento první TCP koncový bod; konektor však stále musí provést níže popsanou výměnu.

Konektor SOCKS5 pak musí provést výměnu protokolu:

  1. Odešlete pozdrav verze 5 se seznamem metod ověřování, které klient podporuje.
  2. Přečtěte zvolenou metodu a v případě potřeby proveďte její ověřovací výměnu.
  3. Odešlete CONNECT s typem adresy cíle, adresou a portem v síťovém pořadí bajtů.
  4. Přečtěte odpověď, zkontrolujte její verzi a kód výsledku a spotřebujte celou připojenou adresu a port proměnné délky.
  5. Předejte navázaný proud protokolu aplikace.

Pomocník nazvaný socks5::async_proxy_connect patří k implementaci SOCKS, která tohoto pomocníka poskytuje. Uvedení vedle boost::asio z něj nečiní součást rozhraní socketu TCP v Asio.

Čtení TCP mohou vrátit jen část odpovědi. Sestavte čtení pro požadované počty bajtů a zbývající délku pak zvolte z pole typu adresy. Nepředpokládejte, že každá odpověď serveru má pevné rozvržení IPv4.

U HTTPS proveďte TLS handshake s cílem až po úspěšném SOCKS CONNECT a zachovejte SNI a ověření názvu hostitele cíle. Úspěšná odpověď proxy sama o sobě web neověřuje.

Udržujte zrušení a termíny po celou sekvenci sestavení. Pokud vyprší čas navázání TCP spojení, pozdější výměny pozdravu, ověření a CONNECT zůstanou bez omezení.

Související články