Connectar un socket TCP d'Asio a un oient SOCKS5 completa un pas: la connexió TCP amb aquell oient. No demana al proxy que es connecti al servidor final. Per a una prova permesa contra un objectiu públic, la llista de proxys SOCKS5 ofereix candidats per a aquest primer extrem TCP; el connector encara ha de completar l'intercanvi de sota.

Un connector SOCKS5 ha d'executar després l'intercanvi de protocol:

  1. Envieu una salutació de versió 5 que llisti els mètodes d'autenticació que admet el client.
  2. Llegiu el mètode seleccionat i feu el seu intercanvi d'autenticació quan calgui.
  3. Envieu CONNECT amb el tipus d'adreça de destinació, l'adreça i el port en ordre de bytes de xarxa.
  4. Llegiu la resposta, comproveu-ne la versió i el codi de resultat, i consumiu l'adreça vinculada i el port complets de longitud variable.
  5. Lliureu el flux establert al protocol de l'aplicació.

Un auxiliar anomenat socks5::async_proxy_connect pertany a la implementació de SOCKS que proporciona aquest auxiliar. Anomenar-lo al costat de boost::asio no el converteix en part de la interfície de socket TCP d'Asio.

Les lectures TCP poden retornar només una part d'una resposta. Composeu lectures per als recomptes de bytes necessaris i trieu després la longitud restant del camp de tipus d'adreça. No assumiu que cada resposta del servidor tingui el disseny IPv4 fix.

Per a HTTPS, feu l'apretada de mans TLS de destinació després que SOCKS CONNECT tingui èxit, preservant l'SNI i la verificació del nom d'amfitrió de la destinació. Una resposta de proxy correcta per si sola no autentica el lloc web.

Manteniu la cancel·lació i els terminis durant tota la seqüència de configuració. Si s'esgota el temps d'establiment de la connexió TCP, els intercanvis posteriors de salutació, autenticació i CONNECT queden sense límit.

Articles relacionats