Asio potřebuje výměnu SOCKS5 po připojení k proxy
Pojímejte SOCKS5 jako stavový stroj protokolu nad socketem Asio: úplná čtení, ověřené odpovědi a TLS k cíli až po úspěšném CONNECT.
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:
- Odešlete pozdrav verze 5 se seznamem metod ověřování, které klient podporuje.
- Přečtěte zvolenou metodu a v případě potřeby proveďte její ověřovací výměnu.
- Odešlete CONNECT s typem adresy cíle, adresou a portem v síťovém pořadí bajtů.
- 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.
- 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í.