0
0

【Windows】結論 ftp.exe は Passive モードに対応していない!

Last updated at Posted at 2024-09-13

先日、会社の後輩から Windows の ftp.exe のエラー調査のヘルプを頼まれ、ftp.exe は結局 Passive 通信できるの?できないの?と確認が必要になったので調べてみました。

結論

ftp.exe は Passive モードに対応していない。

※quote pasv コマンドを実行しても実際は Active モードで通信している。

インターネットには情報があふれている

「ftp.exe Passive」で検索するといくつかの記事がヒットしますが、「Passiveモードに対応していない!」「いやっ!実はPassiveモードに対応している!」と情報が入り乱れており「結局どっちなの!」と言いたくなる状況です。

一から探していると大変なので、今回調査して参考になったサイトをこちらに記載しておきます。

Passive モードに対応していると誤解する理由

  • ftp.exe は Passive モードに対応していると結論付けている記事が公開されている
  • quote pasv を実行すれば Passive モード通信できると主張する情報も見つかる
  • 実際 quote pasv を実行して通信できることがある

誤解の解消

ftp.exe の quote pasv について

  • quote pasv は FTP サーバー側を Passive モードに切り替えるだけ
  • quote pasv を実行しても port コマンドが送信され、FTP クライアント(ftp.exe)側は Active モードのまま変わらない

quote pasv を実行して通信できる理由

  • ftp.exe は quote pasv 実行後も PORT を送信して Active モードで通信する
  • FTPサーバーによっては quote pasv 実行後に port を受信しても Active モードで正常応答できるものがある
    ※quote pasv 実行後に port を実行するとエラーになるFTPサーバーもある(IISなど)

FTPサーバーによっては通信できてしまうので誤解されているようですが、通信パケットを確認すれば実は Active モードになっていることが確認できます。

quote pasv の後 port が送信され Active モードで通信している例

こちらは IIS の Microsoft FTP Service を利用し、ftp.exe で接続。quote pasv を実行した後に port コマンドが送信され、データコネクションが失敗している例です。

image.png

以下の流れになっています。

  1. FTPサーバーに接続
  2. quote pasv を実行
  3. pasv コマンドが送信される
    ※quote pasv コマンドにより送信されているだけ
     クライアントは Active モードのまま変わらない
  4. dir を実行
  5. port コマンドが送信される
    ※Active モードのまま port が送信されている
  6. list コマンドが送信される
  7. データ接続しようとして、接続できなかったとエラーが返される

パケットキャプチャー結果はこちら。

image.png

FTPクライアントは(10.~)、FTPサーバーは(20.~)になります。

  1. 27番でクライアント(10.~)から pasv を送信
  2. 33番でクライアント(10.~)から port を送信
  3. 37番で サーバー(20.~)からクライアントへFTPデータ用の接続(syn) が行われている
    ※ここで「サーバー」から「クライアント」への接続、
     「送信元ポート」が「TCP 20番」であることから Active モードでの通信と判断できます
  4. 47番でクライアント(10.~)から list を送信
  5. 51番で接続できなかったとエラーが返されている

このように、quote pasv を実行しても Active モードで通信されていることが分かります。

総括

Windows の ftp.exe では Passive モード通信ができないため、Passive モードで通信したい場合は curl(最近の Windows では標準で利用できるようになりました)や WinSCP など他ソフトを利用するようにしましょう。

蛇足

ftp.exe で通信できない場合は、Passive モードが使えない以外に、以下の原因が考えられます。

  • Windows ファイアウォールで通信許可されていない
    • 受信用の通信許可が必要です
  • ネットワーク上のファイアウォールで通信許可されていない
  • NAT や SNAT が FTP 通信を考慮していない
    • Azureなどのクラウド環境で外部FTPサーバーに接続できない時は、これが原因の場合があります

今回のまとめはここまで。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0