Conectar un socket TCP de Asio a un escucha SOCKS5 completa un paso: la conexión TCP con ese escucha. No pide al proxy que se conecte al servidor final. Para una prueba permitida contra un objetivo público, la lista de proxies SOCKS5 ofrece candidatos para ese primer extremo TCP; el conector aún debe completar el intercambio de abajo.

Un conector SOCKS5 debe ejecutar después el intercambio del protocolo:

  1. Enviar un saludo de versión 5 que enumere los métodos de autenticación que admite el cliente.
  2. Leer el método seleccionado y realizar su intercambio de autenticación cuando se requiera.
  3. Enviar CONNECT con el tipo de dirección del destino, la dirección y el puerto en orden de bytes de red.
  4. Leer la respuesta, comprobar su versión y el código de resultado, y consumir la dirección vinculada y el puerto completos de longitud variable.
  5. Entregar el flujo establecido al protocolo de la aplicación.

Un auxiliar llamado socks5::async_proxy_connect pertenece a la implementación de SOCKS que proporciona ese auxiliar. Nombrarlo junto a boost::asio no lo convierte en parte de la interfaz de socket TCP de Asio.

Las lecturas TCP pueden devolver solo una parte de una respuesta. Componga lecturas para los recuentos de bytes necesarios y luego elija la longitud restante del campo de tipo de dirección. No suponga que toda respuesta del servidor tiene el diseño fijo de IPv4.

Para HTTPS, realice el apretón de manos TLS del destino después de que SOCKS CONNECT tenga éxito, preservando el SNI y la verificación del nombre de host del destino. Una respuesta de proxy correcta por sí sola no autentica el sitio web.

Mantenga la cancelación y los plazos durante toda la secuencia de configuración. Si se agota el tiempo de establecimiento de la conexión TCP, los intercambios posteriores de saludo, autenticación y CONNECT quedan sin límite.

Artículos relacionados