山本ワールド
Windowsプログラミング
アルゴリズム Vitual C++ 2008/2013によるWin32/Win64 APIレベルのプログラム 基礎 Vitual C++ 2008/2013によるAPIレベルのプログラム(32/64bit) Wix3でインストーラーを作る Visual C++ 2008 Standard Editonによるフォームアプリケーションのプログラム(32/64bit) Vitual C++ 2008 Standard EditonによるAPIレベルのプログラム(32/64bit) Windows 7対応 Visual C++ 2008 ExpressによるAPIレベルのプログラム Visual C++ 2005 ExpressによるAPIレベルのプログラム Visual C++ Versiosn 5 BORLAND C++ Windowsプログラム全般 Excel VBA その他FTPプロトコル(パッシブモード)
概要
FTPプロトコルのパッシブモードについて説明する。
プロトコルの流れが実際に確認しやすいようにtelnetコマンドを用いる。
telnetコマンドは標準でインストールされていないので、コントロールパネル プログラムと機能 Windowsの機能の有効化または無効化 より Telnet クライアントを選択しインストールする必要があります。
なお、暗号化されていない場合、ユーザー名とパスワード名が平文でネットワークに流れるので注意が必要である。
FTPは制御セッションとデーターセッションを用いて通信する。
制御セッションは、クライアントからのコマンドの送信や、サーバーからのコマンドの実行ステータスが送信される。
データーセッションは、コマンドによりディレクトリの一覧結果やファイルデータの送受信に用いられる。
制御セッションはサーバー側がポート(一般的には21)を用意してクライアントからの接続を待つ。
データーセッションの接続は、サーバー側がアドレスとポート番号を決めてサーバ側が接続されるのを待つパッシブモードと、クライアント側がクライアントのアドレスとポートをサーバに指定しクライアント側にサーバーが接続するのを待つアクティブモードがある。
プロトコルの流れが実際に確認しやすいようにtelnetコマンドを用いる。
telnetコマンドは標準でインストールされていないので、コントロールパネル プログラムと機能 Windowsの機能の有効化または無効化 より Telnet クライアントを選択しインストールする必要があります。
なお、暗号化されていない場合、ユーザー名とパスワード名が平文でネットワークに流れるので注意が必要である。
FTPは制御セッションとデーターセッションを用いて通信する。
制御セッションは、クライアントからのコマンドの送信や、サーバーからのコマンドの実行ステータスが送信される。
データーセッションは、コマンドによりディレクトリの一覧結果やファイルデータの送受信に用いられる。
制御セッションはサーバー側がポート(一般的には21)を用意してクライアントからの接続を待つ。
データーセッションの接続は、サーバー側がアドレスとポート番号を決めてサーバ側が接続されるのを待つパッシブモードと、クライアント側がクライアントのアドレスとポートをサーバに指定しクライアント側にサーバーが接続するのを待つアクティブモードがある。
動作環境
サーバー及びクライアントは同じパソコン(使用しているパソコン台数は1台)とし、アドレスはループバックアドレス(127.0.0.1)を使用。
パソコンのOSはWindows 7 Enterprise 64bit
サーバーはFileZilla Server Version 0.9.50 betaを使用
パソコンのOSはWindows 7 Enterprise 64bit
サーバーはFileZilla Server Version 0.9.50 betaを使用
telnetによるFTP通信
これからtelnetによるFTPサーバーのカレントフォルダーのファイル一覧を取得する例を示す。
白文字がコマンドプロンプトで入力した文字列
赤文字がクライアントからサーバーへ送信した文字列(telnetでキー入力した文字列)
紫文字がサーバーからクライアントへ送信された文字列を示す
USERコマンドでログインユーザー名を指定
PASSコマンドでパスワードを指定
CWDコマンドでサーバのカレントフォルダーを指定
PASVコマンドでパッシブモードを指定
パッシブコマンドの実行結果としてデータセッションのアドレスとポート番号がクライアントに送信される。
以下に実行例を示す。
ポート番号は上位バイトと下位バイトが分離されているので本例では以下のようにポート番号が計算できる。
251*256+231=64487
もう1個のコマンドプロンプトを開き、取得されたアドレスとポート番号を指定してtelnetコマンドを起動する。
ファイルの一覧の受信が終わると自動的に通信が切断される。
白文字がコマンドプロンプトで入力した文字列
赤文字がクライアントからサーバーへ送信した文字列(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 ホストとの接続が切断されました。
Copyright (C) 2012 山本ワールド All Rights Reserved.