Un socket Python en cru no negocia cap proxy pel fet que existeixi http_proxy. Per a una aplicació que parla el seu propi protocol TCP, feu servir un connector que entengui el servei a l'extrem del proxy.

Amb PySocks ja disponible, creeu la connexió explícitament:

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.

Substituïu l'adreça de documentació i el port de destinació. Per a una destinació pública permesa, seleccioneu un candidat de la llista de proxies SOCKS5 només després de comprovar que permet el port objectiu de l'aplicació. Comproveu el paquet instal·lat, els mètodes admesos i els requisits de l'extrem amb la interfície de PySocks.

La resta de l'aplicació intercanvia el seu protocol sobre aquesta connexió establerta. Si aquest protocol fa servir TLS, inicieu-lo després de la negociació del proxy i verifiqueu el nom d'amfitrió real de la destinació. L'autenticació del proxy estableix la ruta; no proporciona l'inici de sessió a la destinació ni el xifratge.

Un receptor SOCKS necessita negociació SOCKS. Un servei HTTP necessita un connector compatible amb CONNECT per a una destinació TCP arbitrària i pot denegar el seu port. Trieu el connector segons el servei que realment s'ofereix, en lloc de canviar una adreça tot deixant l'encaixada de mans equivocada.

Mantingueu la substitució local. Assignar una classe a socket.socket pot afectar importacions i biblioteques no relacionades. Si una altra biblioteca controla la creació de sockets, feu servir la seva fàbrica de connexions o opció de proxy documentada; un diccionari que mai no llegeix no pot canviar aquesta connexió.

Articles relacionats