検索
連載

Windows OSの「Telnet」クライアントの使い方Tech TIPS(2/2 ページ)

古いネットワーク機器のトラブルシューティングやネットワークプロトコルの学習などのために、「Telnet」コマンドを使って直接サーバに接続する際に必要なインストール手順、ポート名の指定、Telnetのコマンドモード、漢字コードの設定方法などを解説する。

Share
Tweet
LINE
Hatena
前のページへ |       

接続が失敗する場合は?

 Telnetで接続しようとしたけれども、何らかの理由で接続できなければ次のようなメッセージが表示される。

C:\>telnet unknownserver
接続中: unknownserver...ホストへ接続できませんでした。 ポート番号 23: 接続に失敗しました ……しばらく待たされた後、このようなメッセージが表示される

C:\>



 接続が失敗する理由は次のように幾つかある。ただ残念なことに、どの場合でも同じメッセージが表示される。

  • 指定したコンピュータ名やFQDN名、IPアドレス、ポート番号が間違っている
  • 指定したコンピュータは存在しているが、Telnetサーバが動いていない
  • 指定したコンピュータは存在しているし、Telnetサーバも動いているが、ファイアウォールなどでブロック(拒否、無応答に設定)されている

 1番目が原因かどうかは、名前解決(名前からIPアドレスを求めること)の結果などを調べるとよいだろう。

 Windows OS環境における名前解決の方法には、TCP/IPで一般的なhostsファイルやDNSだけでなく、lmhostsやWINS、NetBIOSブロードキャストなどを使ったさまざまな手段が存在する。そこで、任意の「ホスト名」が実際にどの「IPアドレス」として解決されているかを調べるには、pingコマンドを使うのが最も手っ取り早い。

 pingコマンドには、pingの対象となるホストのIPアドレスを表示する機能があるので、同じ引数でpingコマンドを再実行すればよい。具体的な手順については、Tech TIPS「Windowsの『ping』コマンドでネットワークトラブルの原因を調査する」を参照していただきたい。

 IPアドレスが正しいのにTelnetで接続できないなら、以下のようなことを調べてみよう。

Telnetオプションの設定

 ローカルエコーの機能を有効にしたり、Telnetで利用する漢字コードや端末のエミューレションタイプなどを切り替えたりするには、Telnetのコマンドモードで、オプション設定機能を利用する。

 Telnetのコマンドモードを利用するには、2通りの方法がある。1つは、Telnetに引数を何も付けずに起動するという方法である。こうするとTelnetはコマンド待ち状態で起動する。

C:\>telnet ……引数なしでtelnetを起動する
Microsoft Telnet クライアントへようこそ

エスケープ文字は 'CTRL+]' です

Microsoft Telnet> ? ……コマンド一覧の表示(helpでも可)

コマンドは省略することができます。サポートされているコマンド:

c    - close                      現在の接続を終了します
d    - display                    パラメーターを表示します
o    - open ホスト名 [ポート番号] ホスト名に接続します (既定のポート番号は 23)
q    - quit                       Telnet を終了します
set  - set                        オプションを設定します ('set ?' で一覧表示)
sen  - send                       サーバーに文字を送信します
st   - status                     状態を表示します
u    - unset                      オプションを解除します ('unset ?' で一覧表示)
?/h  - help                       ヘルプを表示します
Microsoft Telnet>



 この設定画面を表示させるもう1つの方法は、Telnetでリモートのホストへ接続しているときに、「エスケープ文字」という特別な文字を入力することである。

 これは、Telnetの通信モードからコマンドモードへ「エスケープ(脱出)」させるための特別な文字コードのことである。一般的には[Ctrl]+「]」キーが使われる。

 Telnetコマンド起動時に表示されている「エスケープ文字は 'CTRL+]' です」は、このエスケープ文字の現在の設定を表示している。通信中は、このキーを押すと、いつでもすぐにこのコマンドモードへと移行(脱出)する。

 コマンドモードから通常の通信モードへ復帰するためには、何もコマンドを入力せず、単に[Enter]キーを押せばよい。アクティブな接続があれば、すぐに元のTelnetの画面へと切り替わる(有効な接続がなければコマンドモードのまま)。

ローカルエコーの制御

 ローカルエコーとは、ユーザーが入力した文字を、ローカル側で直接表示する機能のことである。ローカルエコーはデフォルトでは無効になっている。有効にするには、コマンドモードで「set」コマンドを実行する。

Microsoft Telnet> set ? ……setコマンドのヘルプ
bsasdel         BackSpace を Del として送信します
crlf            ニューライン モード - リターン キーで CR および LF を送信します
delasbs         Del を BackSpace として送信します
escape x        Telnet クライアント プロンプトに入るエスケープ文字として
                x を使用します
localecho       ローカル エコーを使用します
logfile x       x は現在のクライアント ログ ファイルです
logging         ログを有効にします
mode x          x には console または stream が入ります
ntlm            NTLM 認証を使用します
term x          (x には ansi, vt100, vt52, または vtnt が入ります)
codeset x       (x には Shift JIS,
                        Japanese EUC,
                        JIS Kanji,
                        JIS Kanji(78),
                        DEC Kanji または
                        NEC Kanji が入ります)
Microsoft Telnet> set localecho ……ローカルエコーをオンにする
ローカル エコー: オン
Microsoft Telnet> unset localecho ……ローカルエコーをオフにする(デフォルト状態に戻す)
ローカル エコー: オフ
Microsoft Telnet>



Telnetの設定や状態の表示

 現在set/unsetされている値を確認するには「display(d/disp)」コマンドを実行する。また接続中のコネクションを確認するには「status(st)」コマンドを使う。

Microsoft Telnet> display ……設定の表示
エスケープ文字は 'CTRL+]' です
自動認証 (NTLM 認証) を使う
ローカル エコー: オフ
ニューライン モード - リターン キーで CR および LF を送信します
エミュレーションの種類: VT100/漢字コードセット: Shift JIS
現在のモード: コンソール
使用する端末の種類をネゴシエートする
優先する端末の種類は ANSI です
ネゴシエートされた端末の種類: ANSI
Microsoft Telnet> status ……接続状態の表示
server001 に接続しました ……接続中のTelnetサーバ
ネゴシエートされた端末の種類: ANSI
Microsoft Telnet> close ……強制クローズしてみる
Microsoft Telnet> st ……接続状態の確認
接続していません ……クローズされている
Microsoft Telnet>



漢字コードの設定

 Telnetでは、さまざまな種類の仮想端末に接続するために、「シフトJIS」だけでなく、「EUC」や「JIS」コードなど何種類かの漢字コードセットをサポートしている。

 Windows OSでは一般的にシフトJISコードが使われるので、Windows OS標準のTelnetクライアントでは、デフォルトでシフトJISを入力、表示するようになっている。つまりキーボードから入力された漢字コードはシフトJISコードに変換して送信され、ホスト側から送信されてきた文字はシフトJISコードとして表示されるようになっている。

 Telnetで漢字コードを切り替えるには、「set codeset」コマンドを使用する。引数には「Shift JIS」や「Japanese EUC」「JIS Kanji」などを指定する。ただ残念ながらWindows OSのTelnetクライアントではUTF-8Unicodeはサポートされていない。これらを使いたければ、「PuTTY」のようなサードパーティ製の端末ソフトウェアを利用する必要がある。

Microsoft Telnet> set codeset shift jis ……シフトJISにしてみる
エミュレーションの種類: VT100/漢字コードセット: Shift JIS
Microsoft Telnet> set codeset japanese euc ……EUCにしてみる
エミュレーションの種類: VT100/漢字コードセット: Japanese EUC
Microsoft Telnet> set codeset jis kanji ……JIS漢字コードにしてみる
エミュレーションの種類: VT100/漢字コードセット: JIS Kanji
Microsoft Telnet> set codeset utf-8 ……UTF-8は?
サポートされているコード セットは、Shift JIS、Japanese EUC、JIS Kanji、JIS Kanji(78)、DEC Kanji および NEC Kanji のみです。 ……UTF-8やUnicodeはサポートされない。DEC KanjiはEUCの亜種、NEC KanjiはJISの亜種の漢字コード
Microsoft Telnet>



エスケープ文字/特殊文字/シグナルの送信

 Telnetで通信中は、エスケープ文字を入力すると、すぐにコマンドモードへと移行する。ただ、場合によってはこの文字を相手側へ送信したいこともある。その場合は、コマンドモードで「send esc」とすれば、エスケープ文字そのものを送信できる。送信後、[Enter]キーを押せばすぐに元のTelnet画面へと復帰する。

 「send(sen)」コマンドでは、esc以外にも幾つか特殊な文字/シグナルを送信できる。例えば「send ayt」とすると、相手がTelnetサーバなら、Telnetサーバからの応答メッセージが端末画面に表示される。サーバ側のシェルやコマンドプロンプトが無応答状態になっていても、Telnetサーバ機能が生きているかどうかを確認できる。

Microsoft Telnet> send ? ……sendのヘルプ
ao      Telnet コマンド 'Abort Output' を送信します ……Abortの送信
ayt     Telnet コマンド 'Are You There' を送信します ……確認応答の送信(Telnetサーバが生きていることを示す文字列を返す)
brk     Telnet コマンド brk を送信します ……Break(Quit、Ctrl-\)の送信
esc     現在の Telnet エスケープ文字を送信します ……エスケープ文字の送信
ip      Telnet コマンド 'Interrupt Process' を送信します ……割り込みの送信(Ctrl-C)
synch   Telnet コマンド synch を送信します ……バッファの強制同期フラッシュ
この他の文字列はそのまま Telnet サーバーに送信されます
Microsoft Telnet> send esc ……エスケープ文字を送信してみる
エスケープ文字を送信しました ……送信できた
Microsoft Telnet> send ayt ……AYTを送信してみる
are you there を送信しました ……Windows OSのtelnetサーバサービスの場合、telnet画面側に戻ると「YES」という応答が表示されているはずである
Microsoft Telnet>



 また、エスケープ文字を別の文字に割り当て、デフォルトの[Ctrl]+「]」キーをそのまま通るようにする方法もある。例えば「set escape ^\」とすると(^\は[Ctrl]キーを押しながら[\]キーを押す)、[Ctrl]+[\]キーがエスケープ文字になる。

リモートホストのオープンとクローズ

 Telnetに引数を付けずに起動すると、すぐにコマンドモードになる。この状態からリモートのホストや特定のポートへと接続するには「open(o)」コマンドを用いる。引数として、ホスト名と接続するポート番号(デフォルトはTelnetポート。23番)を指定する。

Microsoft Telnet> open server ……serverのTelnetサーバへ接続する
接続中: server...
Microsoft Telnet> o server smtp ……serverのSMTPサーバへ接続する
接続中: server...



 いったん接続されたコネクションを強制的にクローズするには、まずエスケープ文字を入力してコマンドモードへ移行し、そこで「close(c)」コマンドを実行する。

Microsoft Telnet> status ……接続状態の表示
myserver1 に接続しました ……接続中のTelnetサーバ
ネゴシエートされた端末の種類: ANSI
Microsoft Telnet> close ……強制クローズしてみる
Microsoft Telnet> status ……接続状態の確認
接続していません ……クローズされている
Microsoft Telnet>



終了コマンド

 コマンドモードから(強制的に)Telnetを終了するには、「quit(q)」コマンドを使う(exitではない)。接続中のセッションがあればクローズさせられる。

Microsoft Telnet> quit ……終了コマンド

C:\>



その他のオプション

 コマンドモードで有効なその他のオプションとしては、ログファイルを記録するモード(通信内容を全てテキストファイルとして保存しておくモード)や、エミュレーションする端末タイプの設定(VT52やVT100などが選択可能)、NTLMの認証モードの設定などがある(Telnetの認証モードについてはTIPS「UNIXからTelnetサーバに接続できない」も参照)。

 なお、「telnet -?」とすると、telnet起動時に利用できるオプションの一覧が表示される。ログファイルを記録するなら、「-f」オプションで起動時に指定する方が便利だろう。

C:\>telnet -?

telnet [-a][-e エスケープ文字][-f ログ ファイル名][-l ユーザー名][-t 端末の種類][ホスト [ポート]]
 -a      自動的にログオンします。ユーザー名を自動的に処理する以外は
         -l オプションと同じです。
 -e      Telnet クライアント プロンプトに入るためのエスケープ文字です。
 -f      クライアント側のログのファイル名です。
 -l      リモート システムにログインするユーザー名を指定します。
         リモート システムが TELNET ENVIRON オプションをサポートして
         いる必要があります。
 -t      端末の種類を指定します。
         サポートされている端末の種類は vt100, vt52, ansi と vtnt のみです。
 ホスト  ホスト名または接続するリモート コンピューターの IP アドレスを指定
         します。
 ポート  ポート番号またはサービス名を指定します。

C:\>



■更新履歴

【2022/11/18】Windows 11/Windows Server 2022に対応しました。

【2017/07/06】最新のOSに合わせて内容を加筆・修正しました。

【2016/09/09】最新のOSに合わせて内容を更新しました。

【2002/07/06】初版公開。対象はWindows 2000/Windows XP。


「Tech TIPS」のインデックス

Tech TIPS

Copyright© Digital Advantage Corp. All Rights Reserved.

前のページへ |       
ページトップに戻る