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 може вплинути на сторонні імпорти та бібліотеки. Якщо створенням сокетів володіє інша бібліотека, використовуйте її документовану фабрику з'єднань або опцію проксі; словник, який вона ніколи не читає, не змінить це з'єднання.