■ TELNETクライアントでFTPをしよう
では、実際TELNETクライアントでFTPをやってみようじゃないか、ネット君。ただし、この話を読む前に事前に60回まで読んでおくこと。コマンドの意味がわからないからな。
了解です。
今回は、WindowsXPを使う。まぁ、ちょうど普段使ってるOSだから面倒がなくていいからな。よって、FTPサーバはIIS5.1、TELNETクライアントはWindows標準のモノだ。
まぁ、いますぐご家庭でお試しに、って感じですね。
まぁ、IISの利用はクセがあるがな。ともかく、まずFTPサーバはリモートエコーしてくれないので、ローカルエコーを設定することから始めよう。
[Figure58ex-01:ローカエルエコーをオン]
コマンドプロンプトで、telnetを起動して。set localechoでローカルエコーがオンになる。そうしたら、接続しよう。
[Figure58ex-02:OPENして接続]
IPアドレスの後ろにポート番号の21を入れ忘れちゃダメですよね。
うむ、その通り。そうすると、画面が切り替わって、IISのFTPサービスに接続したことが表示される。
[Figure58ex-03:FTPに接続]
レスポンスコード「220」、「コネクション」の「肯定完了」ですね。
接続しました、ってことだな。そうしたら、次は認証だ。USERとPASSを使って、ユーザ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クライアントで接続するということだ。
[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分間ネットワーキング・おまけ編でした〜♪