SOCKS5プロキシ
HTTPだけでなく任意のTCP/UDPトラフィックをサポートするプロキシプロトコル。HTTPプロキシより汎用性が高い。
SOCKS5は、HTTPプロキシよりも低レベルで動作するプロキシプロトコルで、TCPやUDPを含むあらゆる種類のネットワークトラフィックをサポートします。ウェブトラフィックのみを扱うHTTPプロキシとは異なり、SOCKS5はトレント、ゲーム、VoIP、その他のあらゆるプロトコルに利用できます。
SOCKS5とHTTPプロキシの違い:
- SOCKS5はプロトコル非依存
- HTTPプロキシはHTTPヘッダを検査・変更可能
- SOCKS5は認証とUDPリレーをサポート
- 非HTTPトラフィックではSOCKS5の方が通常高速
仕組み
SOCKS5プロトコル(RFC 1928)はセッション層に位置します。クライアントはSOCKS5サーバーにTCP接続を開き、認証してから、宛先のホストとポートを指定したCONNECTリクエストを送信します。サーバーはその下流接続を開き、以降は双方向でバイトを盲目的に中継します。ペイロードを解析しないため、SOCKS5はTCPまたはUDP上で動作するもの何でも(HTTPS、生のTCP、IRC、MQTT、gRPC、独自のバイナリプロトコルさえも)に対応します。
実務的にはHTTPプロキシでは足りないときにSOCKS5を使います。HTTP_PROXYを尊重しないデスクトップアプリ、長期間の生ソケットを開いたままにする必要のあるスクレイパー、バイナリAPIを呼ぶボット、UDPリレーを必要とするクライアントなど。MurphyはレジデンシャルとISPの同じプール上でSOCKS5をサポートし、認証スキームも同じです。クライアントでプロトコルを切り替えるだけで、それ以外はすべて同一のままです。