このページは乱ことNobuoNakakoが運用する「Etherealを使おう」の一部です。お時間があれば表紙も訪れてやってください
リンク等についてはこちら。間違いを見つけた時や「ここはこうした方が良い」等の意見は遠慮なくこちらまで。
The Ethereal manual
|
Telnetを知る(RFC0854)
|
プロトコル |
|
このページを読む前に「Etherealの読み方」を読んでおいておく事を強くお薦めします。 Telnetはリモート・ホストと端末を接続するプロトコルです。このTelnetにより遠隔でサーバを操作したりする事が可能となっています。仮想端末とも言われます。 このプロトコルはOSI参照モデルでアプリケーション層の位置に存在します。Telnetの障害切り分けにEtherealを使用する場合、Telnetコマンドのキャプチャを調査する事をお薦めします。 RFC Ethernetの代表的なRFCは0854になります。 その他RFC0855(Telnet option specifications)やRFC1282等も余裕があれば読んでください。 サンプルファイル ここで解説するサンプルファイルは当然実際のTELNETのキャプチャデータで行いたいと思います。
サンプルキャプチャファイルではパソコン(SonyのVAIO)192.168.0.3が192.168.0.1(Sun V100)に対してTeraTermを使用してログインしたものです。 MACアドレスはそれらしいものに書き換えてあります。当然ですが色はサンプルファイルではつきません。(当然仮構築サーバです。現在は存在しません) 実際の端末ウィンドウ画面は下記の様になっています。
ダウンロードはこちらで ファイルの開き方は「キャプチャ結果を開く」を参照して下さい。 用語解説 Telnetの解説をする前に知っておいて欲しい用語があります。
解説 サンプルデータのTelnetでは「セッションを張る」→「Telnetコマンドによるネゴシエーション」→「データのやり取り」→「ログアウト」→「TCPセッションを切る」の順番になっています。キャプチャデータのフレーム行番号でいうと「1〜3」→「4〜15」→「16〜87」→「88」→「89〜91」といった流れになります。 1.セッションをはる セッションのキャプチャデータは1番〜3番の間の3行がそれに当たります。基本的にはTCPの3ウェイハンドシェイクです。
これを分かりやすく図にすると以下の様になります。
これでとりあえずPCの3033番ポートとサーバの23番ポート(TELNET)のコネクションが確立Telnetしデータが送受信できる状態になります。 非常に基本的なTCPセッションの張り方です。 2.Telnetコマンドによるネゴシエーション Telnetは上記でコネクションが確立するとTelnetコマンドといわれるNVTで定められたコマンドを使用して各種設定の同期をとります。 サンプルでは4番〜15番にかけてがこの行為になります。これは基本的に1例であって必ずしもこうなるとは限りません。
それではまず4番のキャプチャ結果を選択して詳細表示を見てみて下さい。
上記の様な状態だと思います。4番はサーバである192.168.0.1がクライアント192.168.0.3に対してTelnetコマンドにて5点ばかり要求をしています。 Commandという文字は後に続く文字がTelnetコマンドによるものであるというのを表しています。それぞれを簡単な言葉であらわすと以下の様になります。 Command: ターミナルタイプを送信先で有効にしたい それに対してクライアント192.168.0.3は5行目から解答しています。これらのやり取りを図に表すと以下の様になります。サンプルデータの詳細設定と照らし合わせて確認して下さい。 |
|
|
行番号
|
詳細フレームTelnetの内容
|
送信元
|
送信先
|
意味
|
|
4
|
Command: Do Terminal type |
サーバ(192.168.0.1) |
クライアント(192.168.0.3)
|
サーバでターミナルタイプを送信先で有効にしたい |
| Command: Do Negotiate About Window size | サーバでウィンドウサイズを送信先で有効にしたい | |||
| Command: Do X Display Location | サーバでXディスプレイ・ロケーション送信を送信先で有効にしたい | |||
| Command: Do New Environment Option | サーバで新環境変数オプションを送信先で有効にしたい | |||
| Command: Do Environment Option | サーバで環境変数オプションを有効にしたい | |||
|
5
|
Command: Will Terminal Type |
クライアント(192.168.0.3)
|
サーバ(192.168.0.1)
|
クライアントはターミナルタイプを受け入れます |
| Command: Do Suppress Go Ahead | クライアントはデータ制御を送信先で有効にしたい | |||
| Command: Will Suppress Go Ahead | クライアントはデータ制御を受け入れます | |||
| Command: Do Echo | エコーを送信先で有効にしたい | |||
| Command: Will Negotiate About Windows Size | ウィンドウサイズを受け入れます | |||
|
6
|
サーバ(192.168.0.1)
|
クライアント(192.168.0.3)
|
ACKの送信 | |
|
7
|
Suboption Begin: Negotiate About Window Size |
クライアント(192.168.0.3)
|
サーバ(192.168.0.1)
|
ウィンドウサイズの調整 |
| ↑Width:80 Height:24 | ↑幅80高さ24 | |||
| Command: Suboption End | サブオプションの終了 | |||
|
8
|
Command: Will Suppress Go Ahead |
サーバ(192.168.0.1)
|
クライアント(192.168.0.3)
|
サーバはデータ制御を受け入れます |
| Command: Do Suppress Go Ahead | サーバはデータ制御を有効にしたい | |||
| Command: Will Echo | サーバはエコーを受け入れます。 | |||
|
9
|
Command: Won't X Display Location |
クライアント(192.168.0.3)
|
サーバ(192.168.0.1)
|
クライアントはXディスプレイ・ロケーションを拒否します |
| Command: Won't New Envionment Option | クライアントは新環境変数オプションを拒否します | |||
|
10
|
Command: Don't X Display Location |
サーバ(192.168.0.1)
|
クライアント(192.168.0.3)
|
サーバはXディスプレイ・ロケーションを無効にします |
| Command: Don't New Environment Option | サーバは新環境変数オプションを送信先で無効にします | |||
|
11
|
Command: Won't Environment Option |
クライアント(192.168.0.3)
|
サーバ(192.168.0.1)
|
クライアントは環境変数オプションを拒否します |
|
12
|
Command: Don't Envionment Option |
サーバ(192.168.0.1)
|
クライアント(192.168.0.3)
|
サーバは環境変数オプションを送信先で無効にします |
| Suboption Begin: Terminal Type | ターミナルタイプの調整 | |||
| ↑Send Your Terminal Type | ↑貴方のターミナルタイプを送信してください | |||
| Command: Suboption End | サブオプションの終了 | |||
|
13
|
Command: Won't X Display Location |
クライアント(192.168.0.3)
|
サーバ(192.168.0.1)
|
クライアントはXディスプレイを・ロケーションの無効を受け入れます |
|
14
|
サーバ(192.168.0.1)
|
クライアント(192.168.0.3)
|
ACKの送信 | |
|
15
|
Command: Won't New Envionment Option |
クライアント(192.168.0.3)
|
サーバ(192.168.0.1)
|
クライアントは新環境変数オプションの無効を受け入れます |
| Command: Won't Environment Option | クライアントは環境変数オプションの無効を受け入れます | |||
| Suboption Begin: Terminal Type | ターミナルタイプの調整 | |||
| ↑Here's my
Terminal Type value: vt100 |
ここに私のターミナルタイプを表示します。 |
|||
| Command: Suboption End | サブオプションの終了 |
|
上記のやりとりは当然サーバやクライアントにより異なりますがまず標準的なやりとりといえます。調整している項目をまとめると下記の6つになります。
この他にもTelnetには様々なオプションが存在します。これらのオプションはRFC855を始めとする多くのRFCで参照する事ができます。代表的なものは855、856、858、859、860、1091、1184等です。 DoとWILL、WON'TとDON'Tの関係は知っておく必要があると思いますので以下に解説したいと思います。 4番のキャプチャ結果を見て下さい。サーバは5つのDoを出しています。それに対する解答に2種類ある事に気付いてください。Doに対してWillを返しているのはターミナルタイプとウィンドウズサイズの調整です。次にWon'tを返しているのはXディスプレイ・ロケーションと新環境変数、環境変数の3つです。Doに対してWillを返した場合、「送信側で有効にしたい」という要求に「受け入れます」と返答した事になります。Doに対してWon'tを返した場合、「送信側で有効にしたい」という要求に「拒否します」と返答した事になります。 さて、今度は11番のキャプチャ結果を見て下さい。11番のキャプチャ結果では10番でクライアントが「環境変数は拒否します」と答えられたのに対しサーバはDon'tという形で「送信先で無効にしたい」と改めて主張しています。それに対しクライアントは15番で「Won't」と答えています。これは「無効を受け入れます」という意味になります。前にあったDoに対するWon'tと今回は意味が違う事に注意して下さい。 この様にDoの後のWon'tなのかDon'tの後のWon'tなのかにより意味が異なってきます。これはWon'tに限らずDoもWillもDon'tも同じ事が言えます。書くパターンを下記に表しておきましたので参照して下さい。 |
| Willの後にDoを返す | 有効にしたいという主張に対しそれを受け入れる |
| Willの後にDon'tを返す | 有効にしたいという主張に対しそれを拒否する |
| Doの後にWillを返す | 送信先で有効にしたいという要求に対しそれを受け入れます |
| Doの後にWon'tを返す | 送信先で有効にしたいという要求に対しそれを拒否する |
| Won'tの後にDon't | 無効にしたいという主張に対しそれを受け入れる |
| Don'tの後にWon't | 送信先で無効にしたいという要求に対しそれを受け入れる |
|
3.データのやりとり 実際のデータのやり取りはサンプルデータで16番から88番までがそれに該当します。 さてこちらの方もすべて説明する訳にはいきませんがとりあえず重要な部分を開設していきたいと思います。まずサンプルファイルの16番を見て下さい。
詳細フレームは下記の様になっているかと思います。
実際のVT画面では下記様になっています。
意味は非常に簡単です。「\r\n」となっているのは改行を表しています。つまり2回改行して「SunOS 5.8[改行]」というデータという事になります。この\r\nはWindowsの一般的な改行コードになります。(知っている方は知っていると思いますが・・・)\r\000(\r)はUNIXの改行コードになります。 大体この調子でDateは流れていきます。さて18番のキャプチャデータについてですが、Loginという文字がサーバから出力されたものと同時に「Do
Echo」が入っています。これに対しクライアントは19番で「Won't Echo」と返し、さらにサーバは20番で「Don't Echo」としています。 22番から33番は「test」というログインアカウントを入力している所です。クライアントが「t」と打つとサーバから「t」と返ってきているという事に気づいて下さい。これはキー入力の送信とその入力した文字をNVTに出す為のサーバからの送信の2つがある為です。 4.セッションを切る 一応「exit」と入力した後の88番のキャプチャデータがログアウトになります。 セッションを切るコマンドがTelnetで流されると今度は通常のTCPフローでセッションが切られます。これが89番・90番・91番になります。
これを図にすると下記の様になります。
|
![]() |
Copyright 2003 by Nobuo Nakako All right reserved.