Asio TCP socketo prijungimas prie SOCKS5 klausytojo užbaigia vieną žingsnį: TCP ryšį su tuo klausytoju. Tai neprašo proxy prisijungti prie galutinio serverio. Leidžiamam viešos paskirties testui SOCKS5 proxy sąrašas siūlo kandidatus tam pirmajam TCP galiniam taškui; jungiklis vis tiek turi atlikti toliau aprašytus mainus.

Tada SOCKS5 jungiklis turi atlikti protokolo mainus:

  1. Nusiųskite 5 versijos pasveikinimą, kuriame išvardyti kliento palaikomi autentifikavimo metodai.
  2. Perskaitykite pasirinktą metodą ir prireikus atlikite jo autentifikavimo mainus.
  3. Nusiųskite CONNECT su paskirties adreso tipu, adresu ir prievadu tinklo baitų tvarka.
  4. Perskaitykite atsakymą, patikrinkite jo versiją ir rezultato kodą, tada sunaudokite visą kintamo ilgio susietą adresą ir prievadą.
  5. Perduokite sukurtą srautą programos protokolui.

socks5::async_proxy_connect vadinamas pagalbininkas priklauso SOCKS realizacijai, kuri teikia tą pagalbininką. Jo įvardijimas šalia boost::asio nepadaro jo Asio TCP socketo sąsajos dalimi.

TCP skaitymai gali grąžinti tik dalį atsakymo. Sudarykite skaitymus reikiamiems baitų kiekiams, tada pasirinkite likusį ilgį iš adreso tipo lauko. Nemanykite, kad kiekvienas serverio atsakymas turi fiksuotą IPv4 išdėstymą.

HTTPS atveju atlikite paskirties TLS rankos paspaudimą po sėkmingo SOCKS CONNECT, išsaugodami paskirties SNI ir pagrindinio kompiuterio vardo patikrą. Vien sėkmingas proxy atsakymas neautentifikuoja svetainės.

Išlaikykite atšaukimą ir terminus per visą sąrankos seką. Jei TCP ryšio užmezgimo laikas baigiasi, vėlesni pasveikinimo, autentifikavimo ir CONNECT mainai lieka neriboti.

Susiję straipsniai