telnet 更新日:02/02/05 ■ telnetとは? telnetはテルネットと読みます。これはUNIXシェルへのログインをそのマシンの端末か らではなく、遠隔地から接続するためのプロトコルで、通常25番ポートを使います。 (RAS(Remote Access System)とはしくみが全然違います。) 大多数のインターネット利用者は、プロバイダのダイヤルアップアクセスでインターネ ットに接続していますので、自分のサーバでのディスクにアクセスするのはどうしても 遠隔操作になります。このとき、telnetを使います。telnetは通常の端末からの操作と 同じことができるため、セキュリティ上の理由から各ユーザーに許可していないプロバ イダもあります。しかし、UNIXコマンドを直接自由に扱えるtelnetが使えると便利この 上ありません。 ■ httpに接続してGETする 1) まずtelnetを起動し、設定をローカルエコーをonにする、そして接続するポートを 80番にする ※ ポートとはネットワークをやるとき相手のコンピュータにデータやコマンドを送る とき相手のコンピュータ内のどのソフトまたはサービス(メモリに常駐してデーモン という)に送るかを指定する。 ftp : 21 http : 80 smtp : 25 pop3 : 110 ※ httpはファイルを吐き出したらすぐに接続をきってくる 2) つぎにhttpヘッダー(リクエスト送信)を打ち込む(index.htmlを見る) GET /index.html http/1.1[enter] HOST:ccmath.meijo-u.ac.jp[enter] Referer:直前に見てたページ[enter] UserAgent:telnet(telnet)[enter] * OSや見るソフトの情報()がいるみたい Accept:text/*[enter] Accept-Encoding:gzip[enter] From:??[enter][enter] 3) すると次のように帰ってくる HTTP/1.1 200 OK Date: Sat, 22 Jul 2000 01:08:14 GMT Server: Apache/1.3.12 (Unix) PHP/3.0.14-i18n Last-Modified: Mon, 31 May 1999 08:07:45 GMT ETag: "27002-12d-37524351" Accept-Ranges: bytes Content-Length: 301 Connection: close Content-Type: text/html ここからindex.htmlの内容(タグなどの文字列)。 そしてすぐに切断される ■ http のメソッドについて メソッドの種類には、GETやPOSTなどがあります。 GETメソッドは、HTMLデータや画像データなどを取得する場合に使用します。 GETメソ ッドで要求すると、ヘッダ情報とHTMLデータが返却されます。 GETメソッドでCGIを呼 び出すこともできます。パラメータを渡す場合は、URLの後に"?name1=データ1&name2= データ2"という形式で指定します。 HEADメソッドは、ファイルサイズや更新日時を調 べる場合に利用します。 HEADメソッドを利用するとヘッダ情報だけが返却されます。 POSTメソッドは、CGIなどにデータを渡す場合に使用します。パラメータなどのデータは 環境変数などによって、CGIに渡ります。 以下に、HTTPのバージョンとメソッドの種類を示します。 メソッドの種類 HTTP/1.0 GET, HEAD, PUT, POST, DELETE, LINK, UNLINK HTTP/1.1 OPTIONS, TRACE, PATCH 表2 HTTPで定義されている命令(methods)の例 -------------------------------------------------------------------- 命令 説明 -------------------------------------------------------------------- GET 情報を得る(ヘッダと本体の両方) HEAD 情報のヘッダのみを得る POST 新しく情報を作る -------------------------------------------------------------------- 表3 HTTPで定義されている状態コードの例 -------------------------------------------------------------------- 状態コード 説明 -------------------------------------------------------------------- 200 OK(エラーなし) 301 要求されたデータが移動した 400 要求の形式にエラーがある。 404 要求されたデータが見つからない。 -------------------------------------------------------------------- GET・HEAD メソッド以外に、POST メソッドというものもあります。 CGI にデータを渡 す場合、 http://www.foo.com/bar.cgi?data1=hoge&data2=fuga といったふうに、? の後に渡したい文字列を書き連ねます。 HTTP クライアントは、www .foo.com に接続し、GET メソッドを使って GET /bar.cgi?data1=hoge1&data2=fuga HTTP/1.0 と、そのまま引数を渡します。 しかしこの方法は環境変数経由で文字列が渡されるので、あまりにも長い文字列は渡す ことができません(どれくらいの長さの文字列ならOK か、というのは処理系依存です)。 また、URL として引数が表示されてしまうので、ユーザにデータを見せたくない場合に は不適当です。 そういう場合は POST メソッドを使います。書式は以下の通りです。 POST /bar.cgi HTTP/1.0 Content-Length: 渡したい文字列の長さ (空行) hoge=fuga&hoge2=fuga2&.... もし、データが「hoge=fuga&hoge2=fuga2」ならば、長さは 21 なので、 Content-Length: 21 となります。 ■ メールの受信 まず、telnetでメール・サーバー(例、mail_server)のPOP3のポートである110番に接 続します。 % telnet mail_server 110 すると、 Trying 192.168.1.1... Connected to mail_server. Escape character is '^]'. +OK POP3 mail_server v2000.70 server ready というメッセージが表示されコマンドの入力待ち状態となります。後は対話的にPOP3の コマンドを入力していきます。 [USER]や[PASS]、[STAT]、[LIST]、[RETR] などがPOP3のコマンドです。 メール受信例: (メール・サーバーの110 番ポートに接続) % telnet mail_server 110 Trying 192.168.1.1... Connected to mail_server. Escape character is '^]'. +OK POP3 mail_server v2000.70 server ready (ユーザー名入力) # USER ono +OK User name accepted, password please (パスワード入力) # PASS ******** +OK Mailbox open, 2 messages (サーバーにあるメールの件数とバイト数を表示) # STAT +OK 2 1130 (サーバーにあるメールを番号をつけて表示) # LIST +OK Mailbox scan listing follows 1 565 2 565 . (1番のメールを表示) # RETR 1 +OK 565 octets Received: from paris (paris.dtc.co.jp [192.168.1.2]) by mail_server.dtc.co.jp (8.10.1/3.7W) with ESMTP id f171XOP14509 for ; Wed, 7 Feb 2001 10:33:24 +0900 (GMT) To: ono@mail_server.dtc.co.jp From: Shinichirou Ono Message-Id: <200102071030.HAG01892.OPP@mail_server.dtc.co.jp> X-Mailer: Winbiff [Version 2.31PL6 (on Trial)] Date: Wed, 7 Feb 2001 10:30:05 +0900 Mime-Version: 1.0 Content-Type: text/plain; charset=iso-2022-jp Content-Length: 54 Status: RO テストメールです。 . (1番のメールを削除) # DELE 1 +OK Message deleted (受信終了) # QUIT +OK Sayonara Connection closed by foreign host. ■ メールの送信 メールの送信は受信とは別の25番ポートに接続して行います。 % telnet mail_server 25 受信の時と同様にメッセージが出力され、コマンドの入力待ち状態となります。後は、 やはり対話的にコマンドを入力していきます。[HELO]や[MAIL FROM:]、[RCPT TO:]など がSMTPのコマンドです。サーバーが返してくる[250]といった数字は返信コードです。 ちなみに250は[OK]という意味です。 ここで注意すべき点は、メール本文の入力です。メール本文は[DATA]コマンドで入力開 始を告げ、[.]で入力を終了します。また、SubjectやFromはSMTPのコマンドではなく、 メール本文中に自分で記述する必要があります。 メール送信例: (メール・サーバーの25番ポートに接続) % telnet mail_server 25 Trying 192.168.1.1... Connected to mail_server.dtc.co.jp. Escape character is '^]'. 220 mail_server.dtc.co.jp ESMTP Sendmail 8.10.1/3.7W; Tue, 13 Feb 2001 17:05:22 +0900 (GMT) (クライアントをサーバーに認識させる) # HELO dtc.co.jp 250 mail_server.dtc.co.jp Hello mail_server [192.168.1.1], pleased to meet you (送信元メール・アドレスの入力) # MAIL FROM:ono@mail_server.dtc.co.jp 250 2.1.0 ono@mail_server.dtc.co.jp... Sender ok (送信先メール・アドレスの入力) # RCPT TO:takebe@nikkeibp.co.jp 250 2.1.5 ono@mail_server.dtc.co.jp... Recipient ok (メール本文の入力開始) # DATA 354 Enter mail, end with "." on a line by itself (Subject の入力) # Subject: test mail (From の入力) # From: ono@mail_server.dtc.co.jp (メール本文の入力) # テストメールです。 (メール本文の入力終了) # . 250 2.0.0 f1D85xn04795 Message accepted for delivery (送信終了) # QUIT 221 2.0.0 mail_server.dtc.co.jp closing connection Connection closed by foreign host. その他にも、 received:from ccmath.meijo-u.ac.jp([192.168.136.104]) by ccmfs.meijo-u.ac.jp with smtp x-mailer:telnet などの指定も、[DATA] 中で出来る? 注) % はプロンプトです。# は入力個所という意味で実際は表示されません。 ■ エコーバックについて(Windowsのみ) ポートを指定せずに普通に telnet してログインする場合、キーボードを押してから画 面に文字が表示されるまでにわずかですがタイムラグがあります。これは接続先の telnet サーバが表示すべき文字を返してきて、その文字をこちらの telnet クライア ントが画面に表示するからです。これによってログイン時のパスワード入力するときに は文字を画面に表示しない、などの細かな設定が可能になっています。 タイプした文字がそのまま画面に表示されることを「エコーバック」といいます。つま り標準ではエコーバックが OFF になっているのです。 しかし WWW サーバ、FTP サーバ、POP3 サーバなどはタイプした文字をわざわざ返して はくれません。そのため何をタイプしても画面に表示されないことになります。 Windows の telnet.exe ではエコーバックの ON、OFF を設定できますので、エコーバ ックを ON にしておいてください。 UNIXの telnet ではエコーバックのあり/なしが自動的に設定されますので、このよう な設定変更は必要ありません。 telnet クライアントが telnet サーバに接続するとき は(つまりポート23に接続してリモートログインする場合は)、相手の telnet サーバが エコーバックを送り返してきて、telnet クライアントはそれを表示します。一方、ポ ート23番以外のサーバに接続するときは telnetクライアント自身がエコーバックを表 示します(ローカルエコー)。 UNIX の telnet は telnet サーバ(ポート23)に接続する ときだけネゴシエーションを行い、そこでどのようにエコーバックするかを決めるわけ です。 ■ 改行コードについて(Windowsのみ) GET /index.html HTTP/1.0(リターン) (続けてリターン) などと書いてある場合、とりあえず書いてあるとおりにやってみてください。もしうま くいかなかったら、「リターン」と書いてある部分は「Ctrl-j」とタイプしてみてくだ さい。つまり、 GET /index.html HTTP/1.0(Ctrl-j) (Ctrl-j) となるわけです。同じ Windows の telnet でも、仕様の違いがあるようで、 Windows95のtelnet.exe Enter=CR, C-m=CR, C-j=LF WinNT(5.0)のtelnet.exe Enter=CRLF, C-m=CR, C-j=LF となっているようです。ですから Windows95 の telnet.exe の場合はリターンキーの 代わりに Ctrl-j を押してみてください。 ■ Proxyについて(UNIX・Windows共通) telnetで % telnet www.cs.gunma-u.ac.jp 80 Trying 133.8.2.7... Connected to www.cs.gunma-u.ac.jp. Escape character is '^]'. GET /index.html HTTP/1.0(リターン) (続けてリターン) などとやっても、どうしてもうまくいかない場合は外部ホストのポート80宛のパケット が破棄されているのかもしれません (firewall によるパケットフィルタリング)。 プロバイダから「web を閲覧する際はこの proxy を使ってください」と言われている 方で、ブラウザ上でも その proxy を経由しないと絶対に外部の web を見られないな ら、上記のやり方ではうまくいきません。その場合、 % telnet proxy.foo.com 8080 Trying 10.11.12.13... Connected to proxy.foo.com. Escape character is '^]'. GET http://www.cs.gunma-u.ac.jp/index.html HTTP/1.0(リターン) (続けてリターン) などと proxy サーバに接続するようにしてください。 proxy.foo.com と 8080 の部分 は、自分の環境に合わせて変更して下さい。