Asio heeft een SOCKS5-uitwisseling nodig na het verbinden met de proxy
Behandel SOCKS5 als een protocol-toestandsmachine boven de Asio-socket, met volledige leesacties, gevalideerde antwoorden en TLS naar de bestemming pas na een geslaagde CONNECT.
Een Asio TCP-socket met een SOCKS5-listener verbinden rondt één stap af: de TCP-verbinding naar die listener. Het vraagt de proxy niet om verbinding te maken met de uiteindelijke server. Voor een toegestane test tegen een openbaar doel biedt de SOCKS5-proxylijst kandidaten voor dat eerste TCP-eindpunt; de connector moet de onderstaande uitwisseling alsnog uitvoeren.
Een SOCKS5-connector moet daarna de protocoluitwisseling uitvoeren:
- Stuur een begroeting van versie 5 met de authenticatiemethoden die de client ondersteunt.
- Lees de gekozen methode en voer de bijbehorende authenticatie-uitwisseling uit wanneer dat nodig is.
- Stuur CONNECT met het adrestype, het adres en de poort van de bestemming in netwerkbyte-volgorde.
- Lees het antwoord, controleer de versie en de resultaatcode, en verbruik het volledige gebonden adres en de poort van variabele lengte.
- Geef de opgezette stroom door aan het protocol van de applicatie.
Een helper met de naam socks5::async_proxy_connect hoort bij de SOCKS-implementatie die die helper levert. Het naast boost::asio noemen maakt het geen deel van de TCP-socketinterface van Asio.
TCP-leesacties kunnen slechts een deel van een antwoord teruggeven. Stel leesacties samen voor de vereiste byteaantallen en kies daarna de resterende lengte uit het veld voor het adrestype. Ga er niet van uit dat elk serverantwoord de vaste IPv4-indeling heeft.
Voer voor HTTPS de TLS-handshake naar de bestemming uit nadat SOCKS CONNECT is geslaagd, met behoud van de SNI en de hostnaamverificatie van de bestemming. Een geslaagd proxy-antwoord alleen authenticeert de website niet.
Houd annulering en termijnen aan gedurende de hele installatiereeks. Als de tijd voor het opzetten van de TCP-verbinding verstrijkt, blijven de latere begroetings-, authenticatie- en CONNECT-uitwisselingen anders onbeperkt.