Een SOCKS-bewuste connector voor Python TCP-sockets
Kies een proxybewuste socketconnector en houd het bereik gescheiden van Python's procesbrede socketimplementatie.
Een ruwe Python-socket onderhandelt geen proxy alleen omdat http_proxy bestaat. Gebruik voor een applicatie die zijn eigen TCP-protocol spreekt een connector die de dienst aan het proxy-eindpunt begrijpt.
Als PySocks al beschikbaar is, maak de verbinding expliciet:
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.
Vervang het documentatieadres en de bestemmingspoort. Kies voor een toegestane openbare bestemming een kandidaat uit de SOCKS5-proxylijst pas nadat je hebt gecontroleerd of die de doelpoort van de applicatie toestaat. Controleer het geïnstalleerde pakket, de ondersteunde methoden en de eindpuntvereisten tegen de PySocks-interface.
De rest van de applicatie wisselt zijn protocol uit over deze tot stand gebrachte verbinding. Als dat protocol TLS gebruikt, start het dan na de proxyonderhandeling en verifieer de echte bestemmingshostnaam. Proxyauthenticatie legt de route vast; zij levert niet de inloggegevens van de bestemming of versleuteling.
Een SOCKS-listener heeft SOCKS-onderhandeling nodig. Een HTTP-dienst heeft een CONNECT-capabele connector nodig voor een willekeurige TCP-bestemming en kan zijn poort weigeren. Kies de connector op basis van de dienst die daadwerkelijk wordt aangeboden, in plaats van een adres te wijzigen terwijl de verkeerde handshake blijft staan.
Houd de vervanging lokaal. Een klasse toewijzen aan socket.socket kan niet-verwante imports en bibliotheken beïnvloeden. Als een andere bibliotheek het aanmaken van sockets bezit, gebruik dan de gedocumenteerde verbindingsfactory of proxyoptie; een woordenboek dat zij nooit leest kan die verbinding niet wijzigen.