SOCKS-svjesni konektor za Python TCP sockete
Izaberite konektor koji razumije proxy i držite njegov djelokrug odvojen od procesne implementacije socketa u Pythonu.
Sirovi Python socket ne pregovara proxy zato što postoji http_proxy. Za aplikaciju koja govori vlastiti TCP protokol koristite konektor koji razumije uslugu na proxy odredištu.
Kada je PySocks već dostupan, kreirajte vezu eksplicitno:
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.
Zamijenite dokumentacijsku adresu i odredišni port. Za dopušteno javno odredište odaberite kandidata sa liste SOCKS5 proxyja tek nakon provjere da dopušta ciljni port aplikacije. Provjerite instalirani paket, podržane metode i zahtjeve odredišta prema PySocks sučelju.
Ostatak aplikacije razmjenjuje svoj protokol preko ove uspostavljene veze. Ako taj protokol koristi TLS, pokrenite ga nakon pregovora s proxyjem i provjerite stvarno ime odredišnog hosta. Proxy autentifikacija uspostavlja rutu; ona ne daje prijavu na odredište ni enkripciju.
SOCKS slušatelj treba SOCKS pregovor. HTTP usluga treba konektor koji podržava CONNECT za proizvoljno TCP odredište i može odbiti njegov port. Odaberite konektor prema usluzi koja se stvarno nudi, umjesto da mijenjate adresu ostavljajući pogrešan handshake.
Neka zamjena ostane lokalna. Dodjeljivanje klase socket.socket može uticati na nepovezane importe i biblioteke. Ako druga biblioteka upravlja stvaranjem socketa, koristite njezinu dokumentiranu tvornicu veza ili proxy opciju; rječnik koji nikada ne čita ne može promijeniti tu vezu.