Un connecteur compatible SOCKS pour les sockets TCP Python
Choisissez un connecteur de socket conscient du proxy et gardez sa portée séparée de l'implémentation de socket globale du processus Python.
Une socket Python brute ne négocie pas de proxy parce que http_proxy existe. Pour une application qui parle son propre protocole TCP, utilisez un connecteur qui comprend le service au point de terminaison du proxy.
PySocks étant déjà disponible, créez la connexion explicitement :
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.
Remplacez l'adresse de documentation et le port de destination. Pour une destination publique autorisée, sélectionnez un candidat dans la liste de proxies SOCKS5 seulement après avoir vérifié qu'il autorise le port cible de l'application. Vérifiez le paquet installé, les méthodes prises en charge et les exigences du point de terminaison avec l'interface PySocks.
Le reste de l'application échange son protocole sur cette connexion établie. Si ce protocole utilise TLS, démarrez-le après la négociation du proxy et vérifiez le nom d'hôte réel de la destination. L'authentification du proxy établit la route ; elle ne fournit ni la connexion à la destination ni le chiffrement.
Un écouteur SOCKS a besoin d'une négociation SOCKS. Un service HTTP a besoin d'un connecteur compatible CONNECT pour une destination TCP arbitraire et peut refuser son port. Choisissez le connecteur selon le service réellement proposé, plutôt que de changer une adresse en laissant la mauvaise poignée de main.
Gardez le remplacement local. Attribuer une classe à socket.socket peut affecter des importations et des bibliothèques sans rapport. Si une autre bibliothèque possède la création de sockets, utilisez sa fabrique de connexions ou son option de proxy documentée ; un dictionnaire qu'elle ne lit jamais ne peut pas changer cette connexion.