広告
広告
https://www.7key.jp/nw/technology/protocol/telnet.html#what
Telnetは、TCP/IPネットワークにおいてネットワークに接続された他の端末を遠隔操作するためのシステム(Telnetサーバが相手端末のNVTとなる)を指します。また、そのシステムを提供するプロトコルを指す場合もあります。Telnetに限ったことではありませんが、操作する側の端末をローカルホスト、遠隔地にあり操作される側の端末をリモートホストと呼びます。まず、Telnetサーバが起動されている端末にローカルホストからTelnetクライアントを使ってログインします。その際は接続先のホスト名かIPアドレスを指定し、ユーザアカウントとパスワードを入力します。認証されれば、その端末があたかも目の前にあるように操作することができます。通常TelnetはTCPのポート番号23番を利用しますが、このポート番号を変更することによって、SMTPやHTTPのようにテキストの入出力を行うアプリケーション層のプロトコルを実行することもできます。
Telnet等により、リモートホストへ接続することをリモート接続と言います。
https://www.7key.jp/nw/technology/protocol/telnet.html#outline
TelnetクライアントがTelnetサーバへ接続する際は、お互いの間でコマンドとデータをやり取りします。ここで言うコマンドはTelnetシステムを実現するために必要な制御情報を指し、データとはクライアント端末とリモートシステム間でやり取りされる情報(ローカルホストでどのキーが押されたか等)のことを指します。ただ、Telnetコマンドで送られる文字コードはUS-ASCII文字で使うコードの範囲外となっており、何らかの方法でコマンドを区別してやらなければ、コマンドとして送られてきたコードがUS-ASCII文字では無いと判断され、無視されることとなります。そこで、コマンドについてはIACエスケープコード(0xFF)と呼ばれるデータを先頭に付け、ASCIIコードではなくTelnetコマンドだと言う目印としています(下記サンプル参照)。
IAC(0xFF) WILL(0xFB) TRANSMIT-BINARY
コード | 項目 | 機能 |
---|---|---|
0xF0(240) | SE[Sub-negotiaon End] | オプションのサブネゴシエーションパラメータ終了。 |
0xF1(241) | NOP[No Operation] | オペレーションなし。受信した側はこれを無視する。 |
0xF2(242) | DM[Data Mark] | 同期信号送出。必ずTCP緊急通知URGと共に指定されなければならない。 |
0xF3(243) | BRK[Break] | ブレーク。 |
0xF4(244) | IP[Interrupt Process] | NVTが接続されているプロセスの割り込み又は中止を行う。 |
0xF5(245) | AO[Abort Output] | ユーザに出力を送信しないよう、出力を抑止する。 |
0xF6(246) | AYT[Are You There] | AYTが受信されたと言う視覚的な証拠をNVTに送信することにより、相手が動作しているかどうかを確認する。 |
0xF7(247) | EC[Erase Character] | 受信側はデータストリームから最後の文字を消去する。 |
0xF8(248) | EL[Erase Line] | 受信側はデータストリームから最後の行を消去する(前回のCRLFは除く)。 |
0xF9(249) | GA[Go Ahead] | 送信可能であることを通知し、送信を促す。 |
0xFA(250) | SB[Sub-negotiation Begin] | 指定されたオプションでサブネゴシエーションを開始する。 |
0xFB(251) | WILL(オプションコード) | 指定されたオプションでの実行開始要求/現在の実行の確認を指示。 |
0xFC(252) | WON'T(オプションコード) | 指定されたオプションでの実行又は実行の継続の拒否を指示。 |
0xFD(253) | DO(オプションコード) | 指定されたオプションでの相手方による実行の要求/実行の要求の確認を指示。 |
0xFE(254) | DON'T(オプションコード) | 指定されたオプションでの相手方による実行の停止/実行停止の要求の確認を指示。 |
0xFF(255) | IAC[Interpret as Command] | Telnetエスケープシーケンス。 |
Telnetではデータとしてローカルホストのキーボードから入力されたコマンドが、1文字ずつUS-ASCII文字の最上位有効ビットを0
に設定した8bitとしてリモートホストへ送信されます。つまり、キーボードから1文字入力するごとに、その1文字(1オクテット)がTCPセグメントのペイロード部に格納され、リモートホストへと送信されることとなるのです。また、文字情報以外にもBackspaceやTabと言った特殊なキーをキーボードから押したと言う情報もリモートホストへ伝える必要があります。そのために標準NVT文字と呼ばれる制御文字が幾つか用意されています。
名前 | コード | コード | 機能 |
---|---|---|---|
NULL文字 | NULL | 0x00(0) | オペレーション無し。 |
BELL文字 | BEL | 0x07(7) | 音声又は視覚的な信号を生成。 |
バックスペース | BS | 0x08(8) | 印刷ヘッドを1文字分左マージンの方向へ移動。 |
水平タブ | HT | 0x09(9) | プリンタを次の水平タブ停止位置に移動。 |
改行 | LF | 0x0A(10) | プリンタの水平位置を維持したままで次のラインに印刷ヘッドを移動。 |
垂直タブ | VT | 0x0B(11) | プリンタを次の垂直タブ停止位置に移動。 |
フォームフィード | FF | 0x0C(12) | プリンタの水平位置を維持したままプリンタを次のページの上端に移動。 |
キャリッジリターン | CR | 0x0D(13) | 現在の行の左マージンに印刷ヘッドを移動。 |
行の終わりはCR(0x0D)とそれに続くLF(0x0A)として送信されます。CR自体を送信したい場合は、CR
とそれに続くNULL文字(0x00)として送信されます。
https://www.7key.jp/nw/technology/protocol/telnet.html#option
Telnetには幾つかのオプション機能があり、このオプション機能を使って接続に関する設定等、NVTの各設定を変更することが出来ます。リモート端末側で利用できるサービス機能をローカル側と変わらないように出来ますので、高機能な端末であれば(NVTに対する)追加機能を使用することも出来ますし、能力の低い端末で不都合が生じることもありません。セッション開始時には両端ともNVTであると仮定され、その後のセッション中はどちらの側から何時でもコマンドを使用する事によりオプション交渉を開始する事ができます。各オプションについては個別のRFCに記述されていますが、交渉をする手順には前述のDO
、DON'T
、WILL
、WON'T
のコマンド/応答が使用されます。オプションの使用要求を相手側に送信しても相手がそれを受け入れる保障はありませんが、オプション無効要求を拒否することは認められていません。
送信側 | 受信側 | 注意 | ||
---|---|---|---|---|
DO | 相手にオプションの使用を要求 | WILL | オプションを使用する | オプションは有効となる |
WON'T | オプションを使用しない | オプションは有効にならない | ||
WILL | 自分がオプションの使用を宣言 | DO | オプションの処理が可能である | オプションは有効となる |
DON'T | オプションをサポートしていない | オプションは有効にならない | ||
WON'T | 相手のオプション使用を中止 | WON'T | 自身のオプションを無効 | 受信側は同意しなければならず、オプションは無効となる |
DON'T | 自分のオプションの無効化を宣言 | DON'T | 了解する | 受信側は同意しなければならず、オプションは無効となる |
例えば、NVTにも幾つかの種類があり、クライアントとサーバの双方で同じ使用の端末を使う必要があります。そこで、クライアントがサーバに対して端末タイプを問い合わせる場合は次のようなネゴシエーションとなります。
名前 | 略意 | オプション | RFC | 意味 |
---|---|---|---|---|
Binary Transmission | バイナリ転送 | 0(0x00) | 856 | 受信した非IAC文字は8bitのバイナリデータと解釈される。 |
Echo | エコー | 1(0x01) | 857 | Telnetコネクション上でデータをエコーする(ローカルエコーに加える場合もある)。 |
Suppress Go Ahead | Go Ahead 抑止 | 3(0x03) | 858 | Go-Ahead文字の転送を抑止する。 |
Status | 状態オプション | 5(0x05) | 859 | コネクションのリモート側から見たTelnetオプションの状態をユーザやプロセスから見られるようにする。 |
Timing Mark | Telnetタイミングマーク | 6(0x06) | 860 | それまでに受信したデータが処理済みであることを示すタイミングマークの送信を受信側に要求する。 |
Terminal Type | ターミナルタイプ | 24(0x18) | 1091 | 最適なターミナルタイプを両端で交渉する。 |
End of Record | エンドオブレコード | 25(0x19) | 885 | 送信データをEOR文字で終了する。 |
Linemode | Telnetラインモード | 34(0x22) | 1184 | テキストを1文字ずつ送るのではなく、テキストラインをローカルで編集して完全な形としてリモート側へ送る。 |
X Display Location | Xディスプレイ位置 | 35(0x23) | 1096 | TelnetをX Windows上で使用している場合にウィンドウ位置が受信側に分かるようにする。 |
Extended Option List | オプション拡張 | 255(0xFF) | 861 | 利用可能なオプションを256以上に増やすために使われる。 |
https://www.7key.jp/nw/technology/protocol/telnet.html#supplement
Telnetにはログイン時に入力するパスワードが平文でネットワーク上を流れてしまう等、セキュリティ上の問題点が多い。そのためインターネット経由ではssh等のよりセキュアなシステムを使う事が推奨されている。
広告