FTPがアクティブモードかパッシブモードか確認する方法

FTPプロトコルの通信には、アクティブモードとパッシブモードがあります。
実際、FTP通信行われているFTPのデータコネクション(データ転送用のコネクション)が

  • アクティブモードか
  • パッシブモードか

確認する方法は、どうしたら良いでしょうか?

環境・前提条件

  • Windows Server 2019 のFTPサーバーを使用し
  • Windowsの標準ftpコマンド(FTPクライアントftp.exe)

を使って確認しました。

結論、PORTコマンドを使っているかPASVコマンドを使っているか確認すればわかる

FTP通信には、

  • 制御コネクション(pwd、cd、mkdirなど)
  • データコネクション(ls、get、putなど)

があり、データコネクションを使う時には毎回、

  • PORTコマンド(アクティブモード)
  • PASVコマンド(パッシブモード)

か指定する必要があります。

なので、PORTコマンドかPASVコマンドかどちらのコマンドがFTP内で実行されているか確認できれば
そのFTP通信がアクティブモードなのか、パッシブモードなのか、確認することが出来ます!

FTPサーバー側ではFTPログを確認すればアクティブモードかパッシブモードかわかる

WindowsのFTPサーバーの場合、以下にFTPログがあります。(デフォルト設定の場合)

C:\inetpub\logs\LogFiles

こちらのFTPログファイルを開きますと、FTPクライアントとFTPサーバーのコマンドのやり取りが記録されています。
このFTPログの中に、PORTコマンドがあればそれはアクティブモードです。

一方、PASVコマンドが確認できれば、パッシブモードです。
上記、画像のpasvの隣の「227」は「Passiveモードに切り替わった」というサーバー側の応答コードです。

参考: 器用な二刀流、FTPでファイル転送!:TCP/IPアレルギー撲滅ドリル(5) - @IT

クライアント側ではFTPコマンド「ls」を実施すればわかる

一方、クライアント側でもアクティブモードかパッシブモードか確認することが出来ます。
それは、データコネクションのFTPコマンド(例えば、「ls」コマンド)を実行すれば、わかります。

上記、画像のように「200 PORT」と帰ってくれば、FTPサーバーがPORTコマンド(アクティブモード)を許可したということです。

一方、上の画像では「quote pasv」コマンドで、FTPサーバーが「227」(Passiveモードに切り替わった)の応答コードを返していますが、その後「ls」コマンドがアクティブモードでFTPサーバーに接続しようとしているため、

425-Cannot open data connection.

 Win32 error:   The network connection was aborted by the local system.
 Error details: Client IP on the control channel didn't match the client IP on the data channel.

というエラーが帰ってきて、データコネクションがうまく通信出来なかったことがわかります。
実は、Windowsの標準FTPコマンドでは、アクティブモードしか実施できないので、このエ425ラーとなってしまっています。

アクティブモードとパッシブモードはどっちがどっち?(覚え方)

FTPサーバー → FTPクライアント

FTPサーバーから、能動的に(アクティブ)にTCPコネクションを張りに行くのがアクティブモードです。

FTPサーバー ← FTPクライアント

一方、FTPサーバーが、受動的に(パッシブ)にTCPコネクションを張られるのがパッシブモードです。
インターネット上の、FTPサーバーに適しているのがパッシブモードです。

FTPがアクティブモードかパッシブモードか確認する方法」への2件のフィードバック

  1. とむ

    FTPES、FTPSでもハマるんですよね
    FTPESだとポートの決定のシーケンスまで暗号化しちゃうので開ける可能性のあるポートを全部開けなきゃいけないという…
    もうSFTP使ってよ。って言いたくなってた(過去形)

    返信
    1. putise 投稿作成者

      >とむさん

      FTPやFTPSでハマリますよね。
      FWなど通信制御があると、意識しなければならないですからね。
      SFTPの方が単純ですね^^

      返信

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です