Asio potrebuje výmenu SOCKS5 po pripojení k proxy
Chápte SOCKS5 ako stavový stroj protokolu nad socketom Asio: úplné čítania, overené odpovede a TLS k cieľu až po úspešnom CONNECT.
Pripojenie socketu TCP v Asio k SOCKS5 naslúchajúcemu dokončí jeden krok: TCP spojenie s týmto naslúchajúcim. Nežiada, aby sa proxy pripojila ku konečnému serveru. Na povolený test verejného cieľa ponúka zoznam proxy SOCKS5 kandidátov pre tento prvý TCP koncový bod; konektor však stále musí vykonať výmenu nižšie.
Konektor SOCKS5 potom musí vykonať výmenu protokolu:
- Odoslať pozdrav verzie 5 so zoznamom metód overovania, ktoré klient podporuje.
- Prečítať zvolenú metódu a v prípade potreby vykonať jej overovaciu výmenu.
- Odoslať CONNECT s typom adresy cieľa, adresou a portom v sieťovom poradí bajtov.
- Prečítať odpoveď, skontrolovať jej verziu a kód výsledku, a spotrebovať celú pripojenú adresu a port premennej dĺžky.
- Odovzdať vytvorený tok protokolu aplikácie.
Pomocník s názvom socks5::async_proxy_connect patrí k implementácii SOCKS, ktorá tohto pomocníka poskytuje. Uvedenie vedľa boost::asio z neho nerobí súčasť rozhrania socketu TCP v Asio.
Čítania TCP môžu vrátiť len časť odpovede. Zostavte čítania pre požadované počty bajtov a zvyšnú dĺžku potom vyberte z poľa typu adresy. Nepredpokladajte, že každá odpoveď servera má pevné rozloženie IPv4.
Pre HTTPS vykonajte TLS podanie rúk s cieľom až po úspešnom SOCKS CONNECT, pričom zachovajte SNI a overenie názvu hostiteľa cieľa. Samotná úspešná odpoveď proxy web neoveruje.
Udržujte zrušenie a termíny po celú sekvenciu nastavenia. Ak vyprší čas nadviazania TCP spojenia, neskoršie výmeny pozdravu, overovania a CONNECT zostanú bez obmedzenia.