Un conector conștient de SOCKS pentru socketuri TCP Python
Alege un conector de socket conștient de proxy și păstrează domeniul său separat de implementarea socket la nivel de proces a Python.
Un socket Python brut nu negociază un proxy doar pentru că există http_proxy. Pentru o aplicație care vorbește propriul protocol TCP, folosește un conector care înțelege serviciul de la capătul proxy.
Dacă PySocks este deja disponibil, creează conexiunea explicit:
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.
Înlocuiește adresa din documentație și portul de destinație. Pentru o destinație publică permisă, selectează un candidat din lista de proxy SOCKS5 doar după ce ai verificat că permite portul țintă al aplicației. Verifică pachetul instalat, metodele acceptate și cerințele punctului final față de interfața PySocks.
Restul aplicației schimbă protocolul prin această conexiune stabilită. Dacă protocolul folosește TLS, pornește-l după negocierea proxy și verifică numele real al gazdei de destinație. Autentificarea proxy stabilește ruta; nu oferă autentificarea la destinație sau criptare.
Un listener SOCKS are nevoie de negociere SOCKS. Un serviciu HTTP are nevoie de un conector capabil de CONNECT pentru o destinație TCP arbitrară și poate refuza portul său. Alege conectorul din serviciul oferit efectiv, în loc să schimbi o adresă lăsând handshake-ul greșit.
Păstrează înlocuirea locală. Atribuirea unei clase la socket.socket poate afecta importuri și biblioteci fără legătură. Dacă o altă bibliotecă deține crearea socketurilor, folosește fabrica sa documentată de conexiuni sau opțiunea de proxy; un dicționar pe care nu îl citește niciodată nu poate schimba acea conexiune.