概要

FTPプロトコルのパッシブモードについて説明する。
プロトコルの流れが実際に確認しやすいようにtelnetコマンドを用いる。
telnetコマンドは標準でインストールされていないので、コントロールパネル プログラムと機能 Windowsの機能の有効化または無効化 より Telnet クライアントを選択しインストールする必要があります。
なお、暗号化されていない場合、ユーザー名とパスワード名が平文でネットワークに流れるので注意が必要である。
FTPは制御セッションとデーターセッションを用いて通信する。
制御セッションは、クライアントからのコマンドの送信や、サーバーからのコマンドの実行ステータスが送信される。
データーセッションは、コマンドによりディレクトリの一覧結果やファイルデータの送受信に用いられる。
制御セッションはサーバー側がポート(一般的には21)を用意してクライアントからの接続を待つ。
データーセッションの接続は、サーバー側がアドレスとポート番号を決めてサーバ側が接続されるのを待つパッシブモードと、クライアント側がクライアントのアドレスとポートをサーバに指定しクライアント側にサーバーが接続するのを待つアクティブモードがある。

動作環境

サーバー及びクライアントは同じパソコン(使用しているパソコン台数は1台)とし、アドレスはループバックアドレス(127.0.0.1)を使用。
パソコンのOSはWindows 7 Enterprise 64bit
サーバーはFileZilla Server Version 0.9.50 betaを使用

telnetによるFTP通信

これからtelnetによるFTPサーバーのカレントフォルダーのファイル一覧を取得する例を示す。
白文字がコマンドプロンプトで入力した文字列
赤文字がクライアントからサーバーへ送信した文字列(telnetでキー入力した文字列)
紫文字がサーバーからクライアントへ送信された文字列を示す

コマンドプロンプト1

コマンドプロンプトを開きサーバーアドレスとポート番号を指定してtelnetコマンドを起動
USERコマンドでログインユーザー名を指定
PASSコマンドでパスワードを指定
CWDコマンドでサーバのカレントフォルダーを指定
PASVコマンドでパッシブモードを指定
パッシブコマンドの実行結果としてデータセッションのアドレスとポート番号がクライアントに送信される。
以下に実行例を示す。
telnet 127.0.0.1 21
220-FileZilla Server version 0.9.50 beta
220 Please visit https://filezilla-project.org/roject.org)
USER username
331 Password required for baka
PASS password
230 Logged on
CWD ./
250 CWD successful. "/" is current directory.

PASV
227 Entering Passive Mode (127,0,0,1,251,231)

コマンドプロンプト2

PASVコマンドの実行結果でカンマで区切られた数字のうち最初の4個がIPアドレス、最後の2個がポート番号を示している。
ポート番号は上位バイトと下位バイトが分離されているので本例では以下のようにポート番号が計算できる。
251*256+231=64487
もう1個のコマンドプロンプトを開き、取得されたアドレスとポート番号を指定してtelnetコマンドを起動する。
telnet 127,0,0,1 64487

コマンドプロンプト1

LISTコマンドを送信しファイルの一覧を要求する。
LIST
150 Opening data channel for directory listing of "/"
226 Successfully transferred "/"

コマンドプロンプト2

後で開いたコマンドプロンプト画面に以下のようなファイルの一覧結果が得られる。
ファイルの一覧の受信が終わると自動的に通信が切断される。
-rw-r--r-- 1 ftp ftp           9864 Oct 08  2005 test.htm

ホストとの接続が切断されました。

コマンドプロンプト1

最初に起動したコマンドプロンプトでQUITを入力するとFTP通信が終了する。
QUIT
221 Goodbye

ホストとの接続が切断されました。