Asio пасля падлучэння да проксі патрабуе абмену SOCKS5
Разглядайце SOCKS5 як машыну станаў пратаколу над сокетам Asio: поўныя чытанні, правераныя адказы і TLS да мэты толькі пасля паспяховага CONNECT.
Падлучэнне TCP-сокета Asio да слухача SOCKS5 выконвае адзін крок: TCP-злучэнне з гэтым слухачом. Яно не просіць проксі злучыцца з канчатковым серверам. Для дазволенага тэсту публічнай мэты спіс проксі SOCKS5 прапануе кандыдатаў для гэтай першай TCP-кропкі; канэктару ўсё яшчэ трэба выканаць абмен ніжэй.
Затым канэктар SOCKS5 павінен выканаць абмен пратаколу:
- Адправіць прывітанне версіі 5 са спісам метадаў аўтэнтыфікацыі, якія падтрымлівае кліент.
- Прачытаць выбраны метад і выканаць яго абмен аўтэнтыфікацыі, калі гэта патрабуецца.
- Адправіць CONNECT з тыпам адрасу мэты, адрасам і портам у сеткавым парадку байтаў.
- Прачытаць адказ, праверыць яго версію і код выніку, затым спажыць поўны звязаны адрас і порт зменлівай даўжыні.
- Перадаць усталяваны паток пратаколу праграмы.
Дапаможнік з імем socks5::async_proxy_connect належыць рэалізацыі SOCKS, якая прадастаўляе гэты дапаможнік. Згадванне яго побач з boost::asio не робіць яго часткай інтэрфейсу TCP-сокета Asio.
Чытанні TCP могуць вярнуць толькі частку адказу. Складайце чытанні для патрэбнай колькасці байтаў, затым выбірайце астатнюю даўжыню з поля тыпу адрасу. Не мяркуйце, што кожны адказ сервера мае фіксаваную разметку IPv4.
Для HTTPS выканайце рукапоціск TLS мэты пасля паспяховага SOCKS CONNECT, захоўваючы SNI мэты і праверку імя хаста. Паспяховы адказ проксі сам па сабе не аўтэнтыфікуе вэб-сайт.
Трымайце скасаванне і тэрміны на працягу ўсёй паслядоўнасці наладкі. Калі час усталявання TCP-злучэння скончыўся, наступныя абмены прывітання, аўтэнтыфікацыі і CONNECT застаюцца без абмежаванняў.