Node の socks パッケージによる SOCKS5 UDP アソシエーション
Node アプリケーションがプロキシ経由で UDP を必要とするときは、SOCKS5 アソシエーションとデータグラムのフレーミングを使います。
Node の socks パッケージは、UDP のために SocksClient インスタンスを command: 'associate' 付きで使います。便利な SocksClient.createConnection() ファクトリは、代わりに TCP CONNECT を扱います。
プロジェクトの アソシエーションの例 は、SOCKS クライアントを別個のローカル UDP ソケットと組み合わせます:
- UDP ASSOCIATE を確立し、その TCP 制御接続を保持します。
- サーバーが返すリレーのホストとポートを読み取ります。
createUDPFrame()を使って、送信ペイロードを宛先アドレスとともにフレーム化します。- データグラムをリレーに送信し、ペイロードをアプリケーションに渡す前に、受信したリレーのフレームに
parseUDPFrame()を使います。
Node の dgram ソケットは UDP トランスポートを提供しますが、SOCKS URL を解釈しません。アソシエーションとフレーミングが、これらのデータグラムの周りにプロキシプロトコルを提供します。
サーバーは UDP をサポートしている必要があり、リレーのエンドポイントに到達できる必要があります。初期プロキシポートへの TCP 接続の成功は、その経路を検証しません。アソシエーションが不要になったら、制御と UDP のリソースを閉じます。