Un conector compatible con SOCKS para sockets TCP de Python
Escolla un conector de sockets que entenda o proxy e manteña o seu alcance separado da implementación de sockets global de Python.
Un socket Python en bruto non negocia un proxy porque exista http_proxy. Para unha aplicación que fala o seu propio protocolo TCP, use un conector que entenda o servizo no extremo do proxy.
Con PySocks xa dispoñible, cree a conexión explicitamente:
import socks
with socks.socksocket() as connection:
connection.set_proxy(socks.SOCKS5, '203.0.113.10', 1080)
connection.settimeout(10)
connection.connect(('example.com', 12345))
# Exchange the destination protocol here.
Substitúa o enderezo de documentación e o porto de destino. Para un destino público permitido, seleccione un candidato da lista de proxies SOCKS5 só despois de comprobar que permite o porto obxectivo da aplicación. Comprobe o paquete instalado, os métodos admitidos e os requisitos do extremo coa interface de PySocks.
O resto da aplicación intercambia o seu protocolo sobre esta conexión establecida. Se ese protocolo usa TLS, inícieo despois da negociación do proxy e verifique o nome de host real do destino. A autenticación do proxy establece a ruta; non proporciona o inicio de sesión no destino nin o cifrado.
Un receptor SOCKS necesita negociación SOCKS. Un servizo HTTP necesita un conector compatible con CONNECT para un destino TCP arbitrario e pode denegar o seu porto. Escolla o conector segundo o servizo que realmente se ofrece, en lugar de cambiar un enderezo deixando o aperto de mans incorrecto.
Manteña a substitución local. Asignar unha clase a socket.socket pode afectar importacións e bibliotecas non relacionadas. Se outra biblioteca controla a creación de sockets, use a súa fábrica de conexións ou opción de proxy documentada; un dicionario que nunca le non pode cambiar esa conexión.