SOCKS-tietoinen liitin Pythonin TCP-soketeille
Valitse välityspalvelimen ymmärtävä sokettiliitin ja pidä sen laajuus erillään Pythonin koko prosessin sokettitoteutuksesta.
Raaka Python-soketti ei neuvottele välityspalvelinta siksi, että http_proxy on olemassa. Sovellukselle, joka puhuu omaa TCP-protokollaansa, käytä liitintä, joka ymmärtää palvelun välityspalvelimen päätepisteessä.
Kun PySocks on jo saatavilla, luo yhteys eksplisiittisesti:
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.
Korvaa dokumentaation osoite ja kohdeportti. Sallitulle julkiselle kohteelle valitse ehdokas SOCKS5-välityspalvelinluettelosta vasta kun olet tarkistanut, että se sallii sovelluksen kohdeportin. Tarkista asennettu paketti, tuetut menetelmät ja päätepisteen vaatimukset PySocks-rajapinnasta.
Sovelluksen loppuosa vaihtaa protokollaansa tämän muodostetun yhteyden yli. Jos tämä protokolla käyttää TLS:ää, käynnistä se välityspalvelinneuvottelun jälkeen ja varmista todellinen kohdeisäntänimi. Välityspalvelimen todennus muodostaa reitin; se ei tarjoa kohteen kirjautumista eikä salausta.
SOCKS-kuuntelija tarvitsee SOCKS-neuvottelun. HTTP-palvelu tarvitsee CONNECT-kykyisen liittimen mielivaltaiselle TCP-kohteelle ja voi kieltää porttinsa. Valitse liitin todella tarjotun palvelun mukaan sen sijaan, että muuttaisit osoitetta ja jättäisit väärän kättelyn.
Pidä korvaus paikallisena. Luokan liittäminen socket.socket-kohtaan voi vaikuttaa riippumattomiin tuonteihin ja kirjastoihin. Jos toinen kirjasto omistaa sokettien luonnin, käytä sen dokumentoitua yhteystehtaan tai välityspalvelinvalintaa; sanakirja, jota se ei koskaan lue, ei voi muuttaa sitä yhteyttä.