Trình kết nối hiểu SOCKS cho socket TCP của Python
Chọn trình kết nối socket hiểu proxy và giữ phạm vi của nó tách biệt với việc triển khai socket toàn tiến trình của Python.
Một socket Python thô không thương lượng proxy chỉ vì có http_proxy. Đối với ứng dụng nói giao thức TCP riêng, hãy dùng trình kết nối hiểu dịch vụ ở đầu proxy.
Khi đã có PySocks, hãy tạo kết nối một cách tường minh:
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.
Thay địa chỉ tài liệu và cổng đích. Đối với đích công khai được phép, chỉ chọn ứng viên từ danh sách proxy SOCKS5 sau khi kiểm tra rằng nó cho phép cổng đích của ứng dụng. Kiểm tra gói đã cài, các phương thức được hỗ trợ và yêu cầu điểm cuối theo giao diện PySocks.
Phần còn lại của ứng dụng trao đổi giao thức qua kết nối đã thiết lập này. Nếu giao thức đó dùng TLS, hãy khởi động nó sau khi thương lượng proxy và xác minh tên máy chủ đích thực. Xác thực proxy thiết lập tuyến đường; nó không cung cấp đăng nhập đích hay mã hóa.
Trình lắng nghe SOCKS cần thương lượng SOCKS. Dịch vụ HTTP cần trình kết nối hỗ trợ CONNECT cho đích TCP tùy ý và có thể từ chối cổng của nó. Hãy chọn trình kết nối theo dịch vụ thực sự được cung cấp, thay vì đổi địa chỉ mà để lại bắt tay sai.
Giữ việc thay thế cục bộ. Gán một lớp cho socket.socket có thể ảnh hưởng đến các import và thư viện không liên quan. Nếu thư viện khác sở hữu việc tạo socket, hãy dùng nhà máy kết nối hoặc tùy chọn proxy đã được ghi tài liệu của nó; một từ điển mà nó không bao giờ đọc không thể thay đổi kết nối đó.