Telnetで接続しようとしたけれども、何らかの理由で接続できなければ次のようなメッセージが表示される。
C:\>telnet unknownserver
接続中: unknownserver...ホストへ接続できませんでした。 ポート番号 23: 接続に失敗しました ……しばらく待たされた後、このようなメッセージが表示される
C:\>
接続が失敗する理由は次のように幾つかある。ただ残念なことに、どの場合でも同じメッセージが表示される。
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のコマンドモードを利用するには、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>
現在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-8やUnicodeはサポートされていない。これらを使いたければ、「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。
Copyright© Digital Advantage Corp. All Rights Reserved.