telnetコマンドでポート確認する方法と代わりのコマンド

公開: 2026年10月 カテゴリ: インフラ実務

「pingは通るのに、サーバーのサービスにつながらない」。そんなとき、昔からよく使われてきたのが telnet 相手 ポート番号 でポートにつながるかを試す方法です。ただ、今のWindowsには最初からtelnetが入っていません。この記事では、telnetでの確認方法と、インストールなしで使える代わりのコマンドを、実際に試した結果つきで説明します。

telnetとは

telnetは、ネットワークの向こうのコンピューターを文字で操作するための、古くからあるプロトコル(ポート23番)とコマンドです。通信が暗号化されず、パスワードもそのまま流れるので、リモート操作の用途では暗号化されたSSHに置き換わりました。

それでもtelnetのコマンドが使われ続けているのは、「指定したポートにTCPでつながるか」を手軽に試せるからです。HTTPSの443番、リモートデスクトップの3389番など、どのポートでも試せます。

telnetでポートにつながるか確かめる

telnet 203.0.113.10 443

「'telnet' は、内部コマンドまたは外部コマンド…として認識されていません。」と出たら

Windows 10・11では、telnetのクライアントは標準では入っていません。使うには、「Windowsの機能の有効化または無効化」で「Telnet Client」にチェックを入れるか、管理者のコマンドプロンプトで次を実行します。

dism /online /Enable-Feature /FeatureName:TelnetClient

会社のPCなどで機能を追加できない場合でも、次に紹介するPowerShellのコマンドなら、インストールなしで同じ確認ができます。

代わり①:PowerShellの Test-NetConnection

Test-NetConnection 203.0.113.10 -Port 443

結果の TcpTestSucceeded が True ならつながり、False ならつながりません。つながらないときは、「警告: TCP connect to (203.0.113.10 : 443) failed」のような表示も出ます。True/Falseだけ欲しいときは、-InformationLevel Quiet を付けます。

注意したいのは、つながらないときにとても時間がかかることがある点です。実際に試すと、次のようになりました。

試した相手結果かかった時間
Webサーバーの443番(開いている)True約1秒
自分のPCの使っていないポート(拒否される)False約2.6秒
Webサーバーの81番(応答がない)False約84秒

応答がない相手だと、Test-NetConnectionはIPv6とIPv4の全アドレスに順番に接続を試し、そのたびに待ち時間を使い切るためです。名前ではなくIPアドレスを1つ指定すると、待つ回数が減ります。

代わり②:待ち時間を決めて、すぐ結果を出す

何台ものサーバーを続けて調べるときは、待ち時間を自分で決められる次の書き方が便利です。2秒以内につながれば True、つながらなければ False を返します。

$c = New-Object System.Net.Sockets.TcpClient
$c.BeginConnect('203.0.113.10', 443, $null, $null).AsyncWaitHandle.WaitOne(2000) -and $c.Connected
$c.Close()

「すぐ失敗」か「待たされて失敗」かで原因を分ける

つながらなかったときは、どのくらいで失敗したかが手がかりになります。

失敗のしかた何が起きているか次に疑うところ
すぐ失敗する(数秒以内)相手まで届いたが、そのポートで待ち受けているサービスがないため断られたサービスが止まっていないか、ポート番号が合っているか
長く待たされて失敗する途中か相手のファイアウォールに黙って捨てられている、または相手がいないファイアウォールの許可設定、経路(tracert)

断られたときの .NET のエラーは「対象のコンピューターによって拒否されたため、接続できませんでした。」(英語版では "actively refused it")で、これが「すぐ失敗」の典型です。リモートデスクトップ(3389番)がつながらないときの、この先の確かめ方は リモートデスクトップが接続できない時の確認方法 にまとめています。

LinuxやMacでは

LinuxやMacでは、nc -vz 203.0.113.10 443 がよく使われます。つながれば succeeded や open、断られれば refused のように表示されます(表示は nc の種類で少し違います)。nc が入っていない環境では、bashの機能を使って次のようにも確かめられます。

timeout 3 bash -c '</dev/tcp/203.0.113.10/443' && echo open || echo closed

よくある質問

Q. telnetは危険だと聞いたけど、ポートの確認に使っても大丈夫?
A. 危険なのは、telnetでサーバーにログインしてパスワードを送ることです。つながるかどうかを確かめて、すぐに閉じるだけなら問題ありません。ただし、つながった先でIDやパスワードを打ち込まないでください。

Q. pingは通るのに、ポートの確認だけ失敗するのは?
A. pingはポートを使わないので、IPアドレスまで届くことしか分かりません。ポートで失敗するなら、相手のサービスが止まっているか、ファイアウォールでそのポートが許可されていないかのどちらかです。どちらかは、上の「すぐ失敗か、待たされて失敗か」で見分けられます。pingで分かる範囲は pingの記事 を見てください。

Q. 自分のPCでどのポートが開いているかを知りたい。
A. 自分のPCが待ち受けているポートは、netstat -ano や Get-NetTCPConnection -State Listen で一覧できます。手順は 使用中のポート・開いているポートを確認する方法 にまとめています。

🔗 関連:ポート番号とは(一覧と確認方法) / pingの使い方と結果の見方 / tracertの使い方と結果の見方 / リモートデスクトップが接続できない時の確認方法