Windows ftp.exe の怪

提供: tknotebook
2014年10月26日 (日) 16:25時点におけるNakamuri (トーク | 投稿記録)による版

(差分) ←前の版 | 最新版 (差分) | 次の版→ (差分)
移動: 案内検索

メインページ>コンピュータの部屋

現象

Windows付属の ftp.exe でファイル転送ができない。

トラブル発生条件は以下の通り。

  1. サーバ IIS
  2. クライアント FTP.exe
  3. モード Passive

手順

  1. クライアントをサーバに接続しログイン。
  2. quote PASV でサーバをPassiveモードにする。
  3. PUT や DIR を実行すると 425(データ転送用接続確率失敗) エラーになる。

サーバが IIS でなければ起きないし、クライアントを ftp.exe 以外にしても起きない。

原因

実は Windows の ftp.exe は Passive モードをサポートしていません。Protocol Analyzer で電文を追ってみると、 quote PASV で、サーバに PASV コマンドを送り、レスポンスを受けた後、サーバに PORT コマンドを送ってしまいます。 そもそも quote PASV の quote コマンドはサーバに任意の文字列を送るためのコマンドなので、ftp.exe は Passive モードなんて 知ったこっちゃありません。

IIS は PORT コマンドに従って、データ転送用接続を確立しますが、すぐに接続を切ってしまいます。これが結局エラー425を引き起こします。 おそらく IIS は自分がPassive なのに サーバ側からデータ接続を確立するように指示が来たことに、不審の念があるのでしょう。

CENT OS の vftpd では、PORT コマンドが通知された時点で速やかに接続をサーバより行い、その接続がデータ転送が終わるまで維持されるので、Active モードとして処理が進行し問題は起きません。ただし、当然 Passiveモードを前提に組んだファイアウォールなどが挟まっている場合はトラブルが起きるでしょう。

対処

Passive を使いたいなら ftp.exe を使うことは諦めるしかありません。