Un socket .NET necesita un aperto de mans SOCKS
Explica que debe facer un socket TCP .NET en bruto antes de que os bytes da aplicación viaxen por un proxy SOCKS.
Apunta-lo Socket.Connect() a un servidor SOCKS abre unha conexión TCP con ese servidor. Os seguintes bytes aínda teñen que falar SOCKS. Enviar o protocolo da aplicación de inmediato deixa o servidor esperando outra conversación.
Con SOCKS5, o establecemento da conexión inclúe a negociación do método, calquera intercambio de autenticación seleccionado e unha solicitude que nomea o destino. Só unha resposta correcta abre o camiño para os bytes da aplicación. Estas etapas defínense no RFC 1928.
Mantén a negociación na capa de conexión
Unha aplicación co seu propio protocolo TCP pode usar un conector consciente do proxy que devolva un fluxo xa establecido. O resto da aplicación le e escribe a través dese fluxo. Un conector debe ter en conta lecturas parciais, enderezos de lonxitude variable, fallos de autenticación e un prazo para a negociación.
Unha implementación escrita á man que le un único búfer de tamaño fixo e supón o éxito é fráxil. TCP non conserva os límites das mensaxes SOCKS. Le a resposta completa descrita polo seu tipo de enderezo antes de iniciar o protocolo da aplicación. Un lector de respostas CONNECT para .NET 7+ ilustra ese paso.
Se unha biblioteca mantida xa fornece esta capa de conexión, comproba as súas versións de SOCKS compatibles, os seus métodos de autenticación e o seu framework de destino. Unha ligazón de foro de hai unha década é un punto de partida para investigar, non unha proba de compatibilidade actual.
A configuración do cliente HTTP ten un ámbito aparte
A configuración de proxy dun cliente HTTP configura ese cliente HTTP. Non modifica cada socket en bruto do proceso. A API de Socket acepta un extremo de rede e deixa a negociación de nivel superior a quen chama.
Para un protocolo de aplicación cifrado, realiza o seu aperto de mans TLS despois de establecer o túnel do proxy. Valida a identidade do destino previsto nesa etapa. A autenticación do proxy e a do destino seguen sendo distintas aínda que usen o mesmo fluxo subxacente.