Conectarea unui socket TCP Asio la un ascultător SOCKS5 încheie un singur pas: conexiunea TCP către acel ascultător. Nu cere proxy-ului să se conecteze la serverul final. Pentru un test permis pe un țintă publică, lista de proxy SOCKS5 oferă candidați pentru acel prim punct final TCP; conectorul trebuie totuși să efectueze schimbul de mai jos.

Un conector SOCKS5 trebuie apoi să execute schimbul protocolului:

  1. Trimiteți un salut de versiunea 5 care enumeră metodele de autentificare acceptate de client.
  2. Citiți metoda selectată și efectuați schimbul ei de autentificare atunci când este necesar.
  3. Trimiteți CONNECT cu tipul adresei destinației, adresa și portul în ordinea octeților de rețea.
  4. Citiți răspunsul, verificați versiunea și codul rezultatului, apoi consumați adresa legată și portul complete, cu lungime variabilă.
  5. Predați fluxul stabilit protocolului aplicației.

Un ajutor numit socks5::async_proxy_connect aparține implementării SOCKS care furnizează acel ajutor. Numirea lui lângă boost::asio nu îl face parte din interfața socketului TCP a Asio.

Citirile TCP pot returna doar o parte a unui răspuns. Compuneți citiri pentru numerele de octeți necesare, apoi alegeți lungimea rămasă din câmpul tipului de adresă. Nu presupuneți că fiecare răspuns al serverului are aspectul IPv4 fix.

Pentru HTTPS, efectuați strângerea de mână TLS a destinației după ce SOCKS CONNECT reușește, păstrând SNI-ul și verificarea numelui de gazdă ale destinației. Un răspuns de proxy reușit singur nu autentifică site-ul web.

Păstrați anularea și termenele pe toată secvența de configurare. Dacă expiră timpul de stabilire a conexiunii TCP, schimburile ulterioare de salut, autentificare și CONNECT rămân nelimitate.

Articole similare