Abrir um fluxo TCP através de SOCKS5 com Qt
Defina o proxy explícito do QTcpSocket antes de ligar ao destino, usando o Qt Network sem requisito de GUI.
O Qt Network consegue negociar SOCKS5 diretamente para um socket TCP. Numa aplicação Qt existente, configure o socket antes de ligar:
QNetworkProxy proxy(
QNetworkProxy::Socks5Proxy,
"proxy.example.net",
1080
);
socket.setProxy(proxy);
socket.connectToHost("service.example.net", 12345);
socket é um QTcpSocket existente. O destino e a porta do exemplo representam o serviço TCP da aplicação. O Qt chega primeiro ao proxy e depois pede-lhe que ligue a esse destino. Para um serviço TCP publicamente acessível onde é permitido um intermediário público, a lista de proxies SOCKS5 fornece candidatos para este exemplo sem conta de proxy. Confirme que o candidato permite o anfitrião e a porta reais do serviço.
Os sinais assíncronos normais do socket continuam a aplicar-se: aguarde connected() antes de trocar dados da aplicação e trate errorOccurred(). Mantenha o objeto socket vivo enquanto a ligação estiver em uso. Para código bloqueante, use antes os métodos de espera documentados do Qt com um tempo limite deliberado.
Isto requer o Qt Network, não uma GUI baseada em widgets. A definição explícita pertence a este socket. Outros sockets podem manter as predefinições da aplicação ou escolher outro proxy. Para tornar este socket direto, defina o seu tipo de proxy como QNetworkProxy::NoProxy antes de ligar.