SOCKS-съобразен конектор за TCP сокети в Python
Изберете конектор за сокет, който разбира прокси, и дръжте обхвата му отделно от процесното изпълнение на сокети в Python.
Суровият сокет в Python не преговаря прокси само защото съществува http_proxy. За приложение, което говори собствен TCP протокол, използвайте конектор, който разбира услугата в крайната точка на проксито.
Когато PySocks вече е наличен, създайте връзката изрично:
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.
Заменете адреса от документацията и порта на местоназначението. За разрешено публично местоназначение изберете кандидат от списъка с SOCKS5 проксита само след като проверите, че позволява целевия порт на приложението. Проверете инсталирания пакет, поддържаните методи и изискванията към крайната точка спрямо интерфейса на PySocks.
Останалата част от приложението обменя своя протокол през тази установена връзка. Ако този протокол използва TLS, стартирайте го след преговорите с проксито и проверете истинското име на хоста на местоназначението. Удостоверяването на проксито установява маршрута; то не дава вход за местоназначението или криптиране.
Слушателят SOCKS се нуждае от SOCKS преговори. HTTP услугата се нуждае от конектор с поддръжка на CONNECT за произволно TCP местоназначение и може да откаже порта си. Изберете конектора според услугата, която действително се предлага, вместо да сменяте адрес, оставяйки грешния ръкостиск.
Дръжте замяната локална. Присвояването на клас на socket.socket може да засегне несвързани импорти и библиотеки. Ако друга библиотека притежава създаването на сокети, използвайте документираната ѝ фабрика за връзки или опция за прокси; речник, който тя никога не чете, не може да промени тази връзка.