Падлучэнне TCP-сокета Asio да слухача SOCKS5 выконвае адзін крок: TCP-злучэнне з гэтым слухачом. Яно не просіць проксі злучыцца з канчатковым серверам. Для дазволенага тэсту публічнай мэты спіс проксі SOCKS5 прапануе кандыдатаў для гэтай першай TCP-кропкі; канэктару ўсё яшчэ трэба выканаць абмен ніжэй.

Затым канэктар SOCKS5 павінен выканаць абмен пратаколу:

  1. Адправіць прывітанне версіі 5 са спісам метадаў аўтэнтыфікацыі, якія падтрымлівае кліент.
  2. Прачытаць выбраны метад і выканаць яго абмен аўтэнтыфікацыі, калі гэта патрабуецца.
  3. Адправіць CONNECT з тыпам адрасу мэты, адрасам і портам у сеткавым парадку байтаў.
  4. Прачытаць адказ, праверыць яго версію і код выніку, затым спажыць поўны звязаны адрас і порт зменлівай даўжыні.
  5. Перадаць усталяваны паток пратаколу праграмы.

Дапаможнік з імем socks5::async_proxy_connect належыць рэалізацыі SOCKS, якая прадастаўляе гэты дапаможнік. Згадванне яго побач з boost::asio не робіць яго часткай інтэрфейсу TCP-сокета Asio.

Чытанні TCP могуць вярнуць толькі частку адказу. Складайце чытанні для патрэбнай колькасці байтаў, затым выбірайце астатнюю даўжыню з поля тыпу адрасу. Не мяркуйце, што кожны адказ сервера мае фіксаваную разметку IPv4.

Для HTTPS выканайце рукапоціск TLS мэты пасля паспяховага SOCKS CONNECT, захоўваючы SNI мэты і праверку імя хаста. Паспяховы адказ проксі сам па сабе не аўтэнтыфікуе вэб-сайт.

Трымайце скасаванне і тэрміны на працягу ўсёй паслядоўнасці наладкі. Калі час усталявання TCP-злучэння скончыўся, наступныя абмены прывітання, аўтэнтыфікацыі і CONNECT застаюцца без абмежаванняў.

Падобныя артыкулы