Asio necesita un intercambio SOCKS5 despois de conectar co proxy
Trate SOCKS5 como unha máquina de estados de protocolo sobre o socket de Asio, con lecturas completas, respostas validadas e TLS do destino só despois de que CONNECT teña éxito.
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:
- Enviar un saúdo de versión 5 que enumere os métodos de autenticación que admite o cliente.
- Ler o método seleccionado e realizar o seu intercambio de autenticación cando se requira.
- Enviar CONNECT co tipo de enderezo do destino, o enderezo e o porto en orde de bytes de rede.
- 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.
- 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.