Ligar um socket TCP do Asio a um ouvinte SOCKS5 conclui um passo: a ligação TCP a esse ouvinte. Não pede ao proxy que se ligue ao servidor final. Para um teste permitido contra um alvo público, a lista de proxies SOCKS5 oferece candidatos para esse primeiro ponto final TCP; o conector ainda tem de concluir a troca abaixo.

Um conector SOCKS5 tem então de executar a troca do protocolo:

  1. Enviar uma saudação de versão 5 que enumere os métodos de autenticação suportados pelo cliente.
  2. Ler o método selecionado e realizar a sua troca de autenticação quando necessário.
  3. Enviar CONNECT com o tipo de endereço do destino, o endereço e a porta na ordem de bytes de rede.
  4. Ler a resposta, verificar a versão e o código de resultado, e consumir o endereço associado e a porta completos de comprimento variável.
  5. Entregar o fluxo estabelecido ao protocolo da aplicação.

Um auxiliar chamado socks5::async_proxy_connect pertence à implementação de SOCKS que fornece esse auxiliar. Nomeá-lo ao lado de boost::asio não o torna parte da interface de socket TCP do Asio.

As leituras TCP podem devolver apenas parte de uma resposta. Componha leituras para as contagens de bytes necessárias e depois escolha o comprimento restante no campo de tipo de endereço. Não assuma que toda resposta do servidor tem o formato IPv4 fixo.

Para HTTPS, realize o aperto de mão TLS do destino depois de SOCKS CONNECT ter êxito, preservando o SNI e a verificação do nome do anfitrião do destino. Uma resposta de proxy bem-sucedida sozinha não autentica o site.

Mantenha o cancelamento e os prazos durante toda a sequência de configuração. Se o tempo de estabelecimento da ligação TCP terminar, as trocas posteriores de saudação, autenticação e CONNECT ficam sem limite.

Artigos relacionados