WindowsやLinuxでリモートのポートへの接続を確認する方法

WindowsやLinuxでリモートのポートへの接続を確認する方法

ここでは、WindowsやLinuxでリモートのTCPポートやUDPポートへの接続(疎通)を確認したいときに活用できるコマンドと使い方を解説します。

Windowsの場合

telnetコマンド

Windowsでは、リモートのTCPポートへの接続を確認する方法として昔から活用されてきたのがtelnetコマンドですが、Windows 10や11では、デフォルトでは無効化されているため、telnetコマンドを使うにはtelnetクライアント機能を有効化する必要があります。

telnetコマンドは、通信データが暗号化されているサービスへは接続できず、宛先ポートもTCPポートしか指定できないため、最近では利用する機会はあまりありません。

telnetクライアントの有効化(Windows 10の場合)

Windows 10でTelnetクライアントを有効化する手順は、次のとおりです。

Windowsの「設定」アプリから「アプリ」を選択します。

WindowsやLinuxでリモートのポートへの接続を確認する方法

「アプリ」画面が表示されるので「アプリと機能」から「オプション機能」をクリックします。

WindowsやLinuxでリモートのポートへの接続を確認する方法

「オプション機能」画面が表示されるので、最下部の「関連設定」にある「Windowsのその他の機能」をクリックします。

WindowsやLinuxでリモートのポートへの接続を確認する方法

「Windowsの機能」画面が表示されるので「Telnetクライアント」にチェックを入れ「OK」をクリックします。

WindowsやLinuxでリモートのポートへの接続を確認する方法

変更の適用処理が行われるので、そのまま待ちます。

WindowsやLinuxでリモートのポートへの接続を確認する方法

「必要な変更が完了しました。」と表示されたら「閉じる」をクリックします。

WindowsやLinuxでリモートのポートへの接続を確認する方法

以上でTelnetクライアントが有効になりました。

telnetクライアントの有効化(Windows 11の場合)

Windows 11でTelnetクライアントを有効化する手順は、次のとおりです。

Windowsの「設定」アプリから「アプリ」>「オプション機能」を選択します。

WindowsやLinuxでリモートのポートへの接続を確認する方法

「オプション機能」の画面が表示されるので、最下部の「関連設定」にある「Windowsのその他の機能」をクリックします。

WindowsやLinuxでリモートのポートへの接続を確認する方法

「Windowsの機能」画面が表示されるので「Telnetクライアント」にチェックを入れ「OK」をクリックします。

WindowsやLinuxでリモートのポートへの接続を確認する方法

変更の適用処理が行われるので、そのまま待ちます。

WindowsやLinuxでリモートのポートへの接続を確認する方法

「必要な変更が完了しました。」と表示されたら「閉じる」をクリックします。

WindowsやLinuxでリモートのポートへの接続を確認する方法

以上でTelnetクライアントが有効になりました。

telnetコマンドの使い方

telnetコマンドで、リモートのTCPポートへ接続できるか確認するときは、コマンドプロンプトを起動して以下のようにコマンドを実行します。

> telnet <ホスト名> <ポート番号>

Test-NetConnectionコマンドレット

PowerShellのTest-NetConnectionコマンドレットを使えば、リモートのTCPポートへの疎通を確認できます。

Test-NetConnectionコマンドレットは、宛先ポートはTCPポートしか指定できませんが、SSL/TLSやSSHなどの通信データが暗号化されたサービスに接続できます。

PS> Test-NetConnection <ホスト名> -port <ポート番号>

たとえば、当サイトのTCPポート443番への接続を確認するときは、以下のようにコマンドを実行します。

> Test-NetConnection 4thsight.xyz -port 443

ComputerName : 4thsight.xyz
RemoteAddress : 153.225.147.241
RemotePort : 443
InterfaceAlias : イーサネット
SourceAddress : 192.168.1.50
TcpTestSucceeded : True

出力内容の最終行に表示されている「TcpTestSucceeded:」がTCPポートへの接続結果で「True」と表示されれば接続成功で、接続失敗時は「False」と表示されます。

Test-NetConnectionコマンドレットの詳細なヘルプは、以下の公式ページをご参照ください。

コマンドヘルプ(Test-NetConnection)

PortQry

telnetコマンドやTest-NetConnectionコマンドレットは、宛先ポートはTCPポートにしか対応していないため、UDPポートへの接続を確認したいときは、Microsoftが提供している「PortQry」ツールを使った方法がおすすめです。

Download PortQry Command Line Port Scanner Version 2.0 from Official Microsoft Download Center

PortQryコマンドでは、TCPやUDPポートへの接続を確認でき、実行例は以下のようになります。(ここではローカルネットワーク上のDNSサーバーへの接続を確認してみました)

> PortQry.exe -n 192.168.10.254 -e 53 -p UDP

Querying target system called:

192.168.10.254

Attempting to resolve IP address to a name...

Failed to resolve IP address to name

querying...

UDP port 53 (domain service): LISTENING or FILTERED

Sending DNS query to UDP port 53...

UDP port 53 is LISTENING

最終行に「UDP port XX is LISTENING」と表示されていれば、接続成功です。

PSPing

PSPingは、IT担当者や開発者がトラブルシューティングやシステム管理をするのに役立つツールを集めたMicrosoft提供の「Sysinternals」に含まれているコマンドラインツールで、Pingコマンドと同じようにICMPによる疎通だけでなく、TCPやUDPポートへの疎通も確認できます。

PSPingツールは、以下のMicrosoftのページからダウンロードできます。

PsPing - Sysinternals | Microsoft Learn

ダウンロードしたZIPファイルを解凍して、任意のフォルダーに配置したら、コマンドプロンプトなどから、以下のようにコマンドを実行します。

> PSPing.exe <ホスト名やIPアドレス>:<ポート番号>

たとえば、IPアドレスが192.168.0.100のTCP80番ポートへの疎通を確認したいときは、以下のようにコマンドを実行します。

> PSPing.exe 192.168.0.100:80

UDPポートへの疎通を確認したいときは、以下のようにコマンドを実行します。

> PSPing.exe -u 192.168.0.100:80

出力画面は以下のようにPingコマンドと似たいような感じで出力され分かりやすいです。

>psping.exe 192.168.0.100:80
PsPing v2.10 - PsPing - ping, latency, bandwidth measurement utility
Copyright (C) 2012-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

TCP connect to 192.168.0.100:80:
5 iterations (warmup 1) ping test:
Connecting to 192.168.0.100:80 (warmup): from 192.168.0.150:55303: 5.61ms
Connecting to 192.168.0.100:80: from 192.168.0.150:55304: 5.60ms
Connecting to 192.168.0.100:80: from 192.168.0.150:55305: 5.61ms
Connecting to 192.168.0.100:80: from 192.168.0.150:55306: 5.20ms
Connecting to 192.168.0.100:80: from 192.168.0.150:55307: 5.57ms

TCP connect statistics for 192.168.0.100:80:
  Sent = 4, Received = 4, Lost = 0 (0% loss),
  Minimum = 5.57ms, Maximum = 5.61ms, Average = 5.24ms

Linuxの場合

ncコマンド

Linuxでポートの疎通を確認したいときは、ncコマンドを使った方法がおすすめです。ncコマンドがインストールされていない場合、RedHat系Linuxなら以下のコマンドでインストールできます。

# dnf install ncat

ncコマンドでポートの疎通を確認するときは、以下のようにコマンドを実行します。

# nc -vz <ホスト名またはIPアドレス> <TCPポート番号>

UDPポートへの疎通を確認したいときは、以下のようにコマンドを実行します。

# nc -vz <ホスト名またはIPアドレス> -u <UDPポート番号>

たとえば、IPアドレスが「192.168.0.100」のマシンのTCPポート番号「80」の疎通を確認したいときは、以下のようにコマンドを実行します。

# nc -vz 192.168.0.100 80

疎通できるときは、出力行の2行目に「Ncat: Connected to ...」と表示されます。

# nc -vz 192.168.0.100 80
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.0.100:80.
Ncat: 0 bytes sent, 0 bytes received in 0.01 seconds.

疎通できなかったときは、出力行の2行目に「Ncat: Connection refused.」などと表示されます。

# nc -vz 192.168.0.100 80
Ncat: Version 7.70 ( https://nmap.org/ncat )
Ncat: Connection refused.

これから開放するポートの疎通も確認できる

ncコマンドは、上に紹介したポートへの疎通を確認する用途に加えて、サーバ側でこれから利用する予定だけど、まだ接続を受け付けるサービスが稼働していないときに、ポートへの接続を待ち受ける代わりのサービスとして実行させることもできます。

サービスを稼働させる前に、利用するポートがファイアーウォールなどで遮断されていないかや、ネットワーク経路に異常がないかを事前に確認したいときに便利です。

たとえば、LinuxサーバーでTCPポート443番への接続を待ち受けるサービスとして実行させるときは、以下のようにコマンドを実行します。

# nc -kl 443

コマンドを実行したら、Ctrl+Cキーを押して終了させるまで指定したポートへの接続を受け付けてくれます。