Conectar un socket TCP de Asio a un oínte SOCKS5 completa un paso: a conexión TCP con ese oínte. Non pide ao proxy que se conecte ao servidor final. Para unha proba permitida contra un obxectivo público, a lista de proxies SOCKS5 ofrece candidatos para ese primeiro extremo TCP; o conector aínda debe completar o intercambio de abaixo.

Un conector SOCKS5 debe executar despois o intercambio do protocolo:

  1. Enviar un saúdo de versión 5 que enumere os métodos de autenticación que admite o cliente.
  2. Ler o método seleccionado e realizar o seu intercambio de autenticación cando se requira.
  3. Enviar CONNECT co tipo de enderezo do destino, o enderezo e o porto en orde de bytes de rede.
  4. Ler a resposta, comprobar a súa versión e o código de resultado, e consumir o enderezo vinculado e o porto completos de lonxitude variable.
  5. Entregar o fluxo establecido ao protocolo da aplicación.

Un auxiliar chamado socks5::async_proxy_connect pertence á implementación de SOCKS que proporciona ese auxiliar. Nomealo xunto a boost::asio non o converte en parte da interface de socket TCP de Asio.

As lecturas TCP poden devolver só unha parte dunha resposta. Composte lecturas para os reconto de bytes necesarios e despois escolla a lonxitude restante do campo de tipo de enderezo. Non supoña que toda resposta do servidor ten o deseño fixo IPv4.

Para HTTPS, realice o aperto de mans TLS do destino despois de que SOCKS CONNECT teña éxito, preservando o SNI e a verificación do nome de host do destino. Unha resposta de proxy correcta por si soa non autentica o sitio web.

Manteña a cancelación e os prazos durante toda a secuencia de configuración. Se se esgota o tempo de establecemento da conexión TCP, os intercambios posteriores de saúdo, autenticación e CONNECT quedan sen límite.

Artigos relacionados