FTP のログインは制御接続を使用します。その後のディレクトリ一覧やダウンロードにはデータ接続が必要で、SOCKS 経由のログインが成功しても失敗することがあります。

まずパッシブモードかアクティブモードかを特定します。パッシブモードでは、クライアントは FTP サーバーが提示したアドレスとポートへ新しい接続を開きます。その接続にも意図したプロキシ経路が必要です。

Ruby のソケット統合

Ruby の Net::FTP API は接続とパッシブモードの動作を文書化しています。SOCKS 統合は制御経路とデータ経路の両方が使うソケット生成を対象にする必要があります。HTTP クライアントの別の場所のプロキシ設定では、それらは構成されません。

統合がソケットの動作を全体に変更する場合は、スレッドに関する影響範囲を確認してください。1 回の転送を囲むブロックでは、共有状態の変更から他のスレッドを分離できません。

プロバイダーは静的エンドポイントを提供することがありますが、それはサービスの機能であり、SOCKS の一般的な要件ではありません。別々の接続が異なる出口を使える場合、FTP サーバーがデータ接続を認証済みの制御接続にどう関連付けるかを確認してください。

到達した段階、モード、データのエンドポイントを、認証情報を除いて記録します。これにより、遮断されたデータ経路とプロキシのログイン失敗を区別できます。

関連記事