解説
SOCKS5はRFC 1928で定義されたトランスポート層プロキシプロトコルです。HTTPリクエストとレスポンスを解析・理解するHTTPプロキシとは異なり、SOCKS5プロキシはより低いレベルで動作します。ペイロードを検査・変更せず、あなたと宛先の間で生のTCPまたはUDPパケットを転送します。これにより、SOCKS5プロキシはTCPまたはUDP上で動作するあらゆるプロトコルを扱うことができ、ウェブトラフィックに限りません。
SOCKS5はSOCKSプロキシプロトコルの最新バージョンであり、IPv6、UDP転送、および認証方式(認証なし、ユーザー名/パスワード、GSS-API)のサポートが追加されています。ほとんどのレジデンシャルおよびISPプロキシプロバイダーは、クライアントが自身のスタックに合ったプロトコルを選択できるよう、HTTPとSOCKS5の両方でエンドポイントを公開しています。
HTTPS経由のウェブスクレイピングでは、HTTP CONNECTプロキシとSOCKS5プロキシの動作はほぼ同一です。どちらも暗号化されたTCPトラフィックをトンネリングします。違いが重要になるのは、クライアントが非HTTPプロトコル(FTP、SMTP、IRC、BitTorrent、ゲーム)を使用する場合、またはUDPサポートが特に必要な場合です。
仕組み
クライアントがSOCKS5 プロキシに接続すると、認証方式を指定する小さなハンドシェイクを送信し、次に宛先ホストとポートを含むCONNECT コマンドを送信します。プロキシはその宛先へのTCP 接続を開き、以降はクライアントと宛先の間でバイトを単純に中継します。HTTP レイヤーの認識はなく、プロキシはURL、ヘッダー、またはレスポンスボディを読み取りません。
このトランスポートレイヤーの透過性こそが、SOCKS5 がTCP ベースのあらゆるプロトコルで機能する理由です。UDP サポートは別個のUDP ASSOCIATE フローを使用し、クライアントはプロキシにUDP データグラムを送信し、プロキシがそれをターゲットに転送します。認証を使用する場合、最初のハンドシェイク時に一度だけ行われ、セッション全体に適用されます。