Asio benodig 'n SOCKS5-uitruiling nadat dit aan die instaanbediener gekoppel het
Behandel SOCKS5 as 'n protokoltoestandmasjien oor die Asio-soket, met volledige lees, gevalideerde antwoorde en TLS na die bestemming eers nadat CONNECT geslaag het.
Om 'n Asio TCP-soket aan 'n SOCKS5-luisteraar te koppel, voltooi een stap: die TCP-verbinding na daardie luisteraar. Dit vra nie die instaanbediener om aan die finale bediener te koppel nie. Vir 'n toegelate toets teen 'n publieke teiken bied die SOCKS5-instaanbedienerlys kandidate vir daardie eerste TCP-eindpunt; die koppelaar moet steeds die uitruiling hieronder voltooi.
'n SOCKS5-koppelaar moet dan die protokoluitruiling uitvoer:
- Stuur 'n groet van weergawe 5 wat die verifikasiemetodes lys wat die kliënt ondersteun.
- Lees die gekose metode en voer die verifikasie-uitruiling uit wanneer dit vereis word.
- Stuur CONNECT met die bestemming se adrestipe, adres en poort in netwerkbyteorde.
- Lees die antwoord, kontroleer die weergawe en die resultaatkode, en verbruik die volledige veranderlike gebonde adres en poort.
- Gee die gevestigde stroom aan die toepassing se protokol oor.
'n Helper met die naam socks5::async_proxy_connect behoort aan die SOCKS-implementering wat daardie helper verskaf. Om dit langs boost::asio te noem, maak dit nie deel van Asio se TCP-soketkoppelvlak nie.
TCP-lees kan slegs 'n deel van 'n antwoord teruggee. Stel lees saam vir die vereiste grepe en kies dan die oorblywende lengte uit die adrestipe-veld. Moenie aanvaar dat elke bedienerantwoord die vaste IPv4-uitleg het nie.
Vir HTTPS, voer die bestemming se TLS-handdruk uit nadat SOCKS CONNECT geslaag het, en behou die bestemming se SNI en gasheernaamverifikasie. 'n Suksesvolle instaanantwoord alleen verifieer nie die webwerf nie.
Hou kansellasie en spertye oor die hele opstelreeks. As die TCP-verbinding se tyd verstryk, bly die latere groet-, verifikasie- en CONNECT-uitruilings anders onbegrens.