Windowsでサーバーやサービスの特定TCPポートに接続できるか確認したいときはPowerShellのTest-NetConnection
コマンドレットが便利です。
今回はそのコマンドを利用してインターネット向けのポート接続確認を試してみました。
また、接続ができないときにはどのような表示がされるのかについても調べてみました。
ICMPで疎通はできないが、TCP接続の正常性は試したいときにおすすめの確認方法です。
1.Powershellで特定TCPポートの接続可否を確認する
1-1.Test-NetConnection コマンドの基本構文
基本的な構文は以下です。
Test-NetConnection -ComputerName <ホスト名またはIP> -Port <ポート番号>
-ComputerName
: 接続先ホスト名またはIPアドレス
-Port
: 確認したいTCPポート番号
1-2. 【実例】KMSホストへの疎通を確かめる
今回は例として、MicrosoftのKMSサーバーに疎通確認を実施してみます。
KMSサーバーの情報は以下です。
- ホスト名:kms.core.windows.net もしくは azkms.core.windows.net
- IPアドレス:23.102.135.246, 20.118.99.224, 40.83.235.53 のいづれか
- ポート番号:1688
1-1-1.ホスト名とポート番号を利用する場合
ホスト名とポート番号を利用する場合には以下のように記載します。
Test-NetConnection -ComputerName kms.core.windows.net -Port 1688
コマンドの引数として -ComputerName
にホスト名を、-Port
にポート番号を記載します。
実行途中には以下のような緑の表示が出ます。

コマンド実行結果は以下のようになります。

正常に疎通が取れる場合、TcpTestSucceeded
が「True」となります。
1-1-2.IPアドレスとポート番号を利用する場合
ホスト名とポート番号を利用する場合には以下のように記載します。
今度は -ComputerName
にIPアドレスを記載します。
Test-NetConnection -ComputerName 23.102.135.246 -Port 1688
こちらも正常に疎通が取れる場合、TcpTestSucceeded
が「True」となります。

2.誤ったポート番号を指定した場合
存在しないポートや通信不可の場合、出力は以下のようになります。
TcpTestSucceeded
: FalsePingSucceeded
: 環境により True/False- 画面上部に「TCP接続が失敗した」と警告表示
TCP接続→ping の順でテストする仕様のため、ICMPが無効でも問題なく診断可能です。
今回は試しにKMS ホストの宛先を指定して、1677 というポートでアクセスしてみます。

もちろんポートが異なるので接続はできず、TcpTestSucceeded
が「False」と表示されます。
また、「Test-NetConnection」コマンドでは TCP の疎通確認ができなかった時点で ping の確認もしてくれます。
ですが、今回は ping の疎通も確認できなかったので、PingSucceeded
も「False」となっていますし、画面上部の「警告」という黄色い文字の欄にも「TCP接続も ping もダメでした」と表示されます。
3.さいごに
過去、ping が通らない宛先に対して TCP レベルで疎通確認する必要なことがあり、その時はまさにこのコマンドを利用して確認を取りました。
利用する機会は多いと思いますので、「powershell で TCP 接続確認できるコマンドがあったな」くらいでも覚えておくといいのかなと思います。