3 Minutes NetWorking
No.58

3Minutes NetWorking

第58回FTP(3) 制御コネクションのおまけ

■ TELNETクライアントでFTPをしよう

インター博士

では、実際TELNETクライアントでFTPをやってみようじゃないか、ネット君。ただし、この話を読む前に事前に60回まで読んでおくこと。コマンドの意味がわからないからな。

ネット助手

了解です。

インター博士

今回は、WindowsXPを使う。まぁ、ちょうど普段使ってるOSだから面倒がなくていいからな。よって、FTPサーバはIIS5.1、TELNETクライアントはWindows標準のモノだ。

ネット助手

まぁ、いますぐご家庭でお試しに、って感じですね。

インター博士

まぁ、IISの利用はクセがあるがな。ともかく、まずFTPサーバはリモートエコーしてくれないので、ローカルエコーを設定することから始めよう。

ローカエルエコーをオン

[Figure58ex-01:ローカエルエコーをオン]

インター博士

コマンドプロンプトで、telnetを起動して。set localechoでローカルエコーがオンになる。そうしたら、接続しよう。

OPENして接続

[Figure58ex-02:OPENして接続]

ネット助手

IPアドレスの後ろにポート番号の21を入れ忘れちゃダメですよね。

インター博士

うむ、その通り。そうすると、画面が切り替わって、IISのFTPサービスに接続したことが表示される。

FTPに接続

[Figure58ex-03:FTPに接続]

ネット助手

レスポンスコード「220」、「コネクション」の「肯定完了」ですね。

インター博士

接続しました、ってことだな。そうしたら、次は認証だ。USERPASSを使って、ユーザIDとパスワードを入れよう。

認証をする

[Figure58ex-04:認証をする]

インター博士

ユーザ「inter」でパスワード「abc1234」だ。その後ろに改行なしで「230 User inter logged in.」と来て、認証が成功しているのがわかる。

ネット助手

あー、改行がないんですか。abc1234230ってなんのことかなぁ、と思ってたんですよ。

インター博士

では次は、そうだな。現在のディレクトリを表示させ、ディレクトリを作って、そこにカレントディレクトリを変更しよう。

ディレクトリコマンド

[Figure58ex-05:ディレクトリコマンド]

ネット助手

「PWD」カレントディレクトリの表示、「MKD」ディレクトリ作成、「CWD」カレントディレクトリ変更、ですね。ディレクトリnetを作って、そこにカレントを変更した、と。

■ リストを表示してみよう

インター博士

さて、リストを表示してみよう。事前にホームフォルダに「1.txt」というのを作っておいた。さらに、今netというディレクトリを作った。よって?

ネット助手

よって、ホームフォルダのリストを表示すれば、「1.txt」と「net」が表示されるってことですよね。

インター博士

うむ。ここで問題は、リストはデータコネクションで受信するということだ。なので、データコネクションを開かなければいけない。というわけで、TELNETクライアントをもう1つ立ち上げる

ネット助手

なるほど、もう1つのTELNETクライアントでデータコネクションの接続を行うんですね。

インター博士

そういうことだな。だが、もう1つ問題がある。通常のアクティブモードを使う場合、待ち受けポートを作らなければいけないがそれができない

ネット助手

ん? どういうことですか?

インター博士

通常のアクティブモード、つまりサーバ側から接続してくる場合、FTPクライアントソフトが任意のポートを待ち受けて、それをPORTコマンドで通知する。だが、TELNETクライアントソフトは接続をすることができるが、待ち受けるポートを作れないのだよ。

ネット助手

ふむー。それは困りましたね。ってことは、パッシブモードってことですか?

インター博士

うむ。パッシブモードでサーバ側ポートにTELNETクライアントで接続するということだ。

PASVコマンド

[Figure58ex-06:PASVコマンド]

インター博士

「227 Entering Passive Mode」でIPアドレスの後ろの数字がポート番号なので、このポート番号に接続する。今回なら、4 × 256 + 144 = 1168だな。

データコネクションに接続

[Figure58ex-07:データコネクションに接続]

ネット助手

……何も起きてないんですけど?

インター博士

いや、これは表示がクリアされていないだけで、ちゃんと接続している。左上にカーソルがもう1つあるのがわかるか?

ネット助手

あー、ありますね。

インター博士

これが接続している証だ。接続できてないなら「接続できません」といってくるからな。
さぁ、リストを受け取ろう。現在はnetディレクトリだから、1つ上のディレクトリに上がってから、LISTコマンドだ。

リストを受け取る

[Figure58ex-08:リストを受け取る]

ネット助手

CDUPでディレクトリを1つ上にあげて、「TYPE A」でASCIIモードにして「LIST」コマンドですか。
「125 Data Connection already open; Transfer starting.」で「226 Transfer complete.」。転送したっぽいですね。

インター博士

そうしたら、先ほどデータコネクションに接続したもう1つのTELNETクライアントを見てみると?

リストの表示

[Figure58ex-09:リストの表示]

ネット助手

おぉぉぉ、ちゃんと最初に作ってあった1.txtと、さっき作ったnetディレクトリがある。

インター博士

まぁ、なきゃ困るな。それで、説明したとおりデータコネクションはデータを送り終わると切断されているのがわかると思う。

ネット助手

確かに。「ホストとの接続が切断されました」って出てますね。データコネクションは1回ごとに接続・切断するんですね。

■ ファイルをダウンロードしてみよう

インター博士

では次はダウンロードだ。といっても、「ファイルをダウンロードする」と「リストを表示する(受信する)」は意味的におなじだから、さっきの手順でできる。

ネット助手

さっきの手順と言うと、パッシブモードにする?

インター博士

そうだ。データコネクションは1回しか使えないから、毎回PASVコマンドを送って、新しくデータコネクションを接続する必要がある。

ネット助手

それは微妙に面倒ですね。

インター博士

まぁ、しょうがないな。さて、さっきと同じように「PASV」と「TYPE」コマンドを行い、ダウンロードだからRETRを使う。

ファイルのダウンロード

[Figure58ex-10:ファイルのダウンロード]

ネット助手

また、「PASV」をやって、ポート番号を入手したら別のTELNETクライアントで接続。
「TYPE A」でASCIIモードにして、「RETR ファイル名」ですね。

インター博士

そうすると、データコネクション側のTELNETクライアントの方でファイルの中身が表示される。

ファイルの表示

[Figure58ex-11:ファイルの表示]

インター博士

これは受け取ったファイルの中身を表示した状態だ。本来のFTPクライアントならこの中身にRETRコマンドで指定したファイル名をつけて保存する。

ネット助手

なるほど、TELNETクライアントなので表示させるだけなんですね。

■ ファイルをアップロードしてみよう

インター博士

最後に、今度はアップロードをしてみよう。

ネット助手

もうわかってきましたよ。PASVでポート番号を入手して、別のTELNETクライアントでデータコネクション接続。で、「TYPE」指定して、「STOR」でアップロードですねっ!!

インター博士

まぁ、間違っちゃいないが。実際のやりかたを見ていこう。

ファイルをアップロード

[Figure58ex-12:ファイルをアップロード]

インター博士

ネット君の言うとおり、「PASV」→「データコネクション接続」→「TYPE」→「STOR」だ。
STORを実行し「Transfer Starting」と出たら、データコネクション側のTELNETクライアントでファイルの中身を入れる。

ネット助手

ははぁ……、ファイルの中身ってどうやっていれればいいんですか?

インター博士

事前にコピーしておいて、データコネクション側のTELNETクライントに張り付ければいいのだよ。

ネット助手

はい、貼りつけました。………何も起きませんよ? 制御コネクションも何も言ってこないし。

インター博士

それはデータの終了を入れないと終わらないからだ。

ネット助手

なるほど。……ENTER押してもダメですよ?

インター博士

ENTERは「改行」で「データの終了」じゃないからな。FTPでデータの終了を示すのはなんだった? 制御コネクションの回で説明したろう?

ネット助手

え〜〜〜〜っと。TCPのFINです。……って、TCPのFINってどうやってやればいいんですか!?

インター博士

それはTELNETクライアントを切断することでコネクションの切断、つまりFINを送るのだよ。CTRLキー+]キーでTELNETクライアントに制御が移るからそこでcloseだ。

データの終了

[Figure58ex-13:データの終了]

ネット助手

]キーって、ENTERの横にある「む」ですね。CTRL+む……。

インター博士

そうすると、コネクションは維持したままTELNETクライアントに制御が移って、「Microsoft Telnet>」と表示されるから、「close」と入れると終了する。

ネット助手

ふむふむ。んで、ホームフォルダを見てみると……、おぉぉ、2.txtができて中身も入ってる!!

インター博士

そりゃそうだろう。

ネット助手

ん〜、でも面倒くさいですね、やっぱり。

インター博士

ま、しかたがないな、それは。さて、最後に「QUIT」で制御コネクションを終了すればOKだ。

制御コネクションの終了

[Figure58ex-14:制御コネクションの終了]

ネット助手

「QUIT」、と。

インター博士

FTPはコネクションを2本使うのが特徴だったな。なので、TELNETクライアントで行う場合も、やはり2つのTELNETクライアントを立ち上げて、それぞれ「制御」と「データ」で接続をかける必要があるのだよ。

ネット助手

はー、なんていうか、面倒くさいけどダイレクトにFTPの動きがわかる気がしますよ。

インター博士

うむ。ではこの「おまけ」は終了としよう。

ネット助手

いぇっさ〜。
3分間ネットワーキング・おまけ編でした〜♪

3 Minutes NetWorking No.58ex

管理人:aji-ssz(at)selene.is.dream.jp