Python TCP ソケット向けの SOCKS 対応コネクター
プロキシを理解するソケットコネクターを選び、その範囲を 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 サービスには、任意の TCP 宛先に対応する CONNECT 対応のコネクターが必要であり、そのポートを拒否する場合があります。誤ったハンドシェイクを残したままアドレスを変更するのではなく、実際に提供されているサービスに応じてコネクターを選択してください。
置き換えはローカルに留めてください。socket.socket にクラスを代入すると、無関係なインポートやライブラリに影響する可能性があります。別のライブラリがソケットの作成を所有している場合は、そのライブラリの文書化された接続ファクトリまたはプロキシオプションを使用してください。決して読まれない辞書はその接続を変更できません。