Windowsでポートを確認するときは、自分のPC内でアプリが待ち受けているかと、別のPCからそのポートへ接続できるかを分けます。前者はコマンドプロンプトのnetstat -ano、後者はPowerShellのTest-NetConnectionを使います。
LISTENINGが出ても、ファイアウォールやルーターを越えて接続できるとは限りません。また、ブラウザーが接続した相手の443番ポートと、自分のPCが待ち受ける443番ポートは別です。見る列をそろえることが、確認の出発点です。
目的に合うコマンドを選ぶ
| 確認したいこと | 実行する場所・コマンド |
|---|---|
| 自分のPCのTCP接続と待受ポート | コマンドプロンプト:netstat -ano -p tcp |
| 自分のPCのTCP 443番の待受だけ | PowerShell:Get-NetTCPConnection -LocalPort 443 -State Listen |
| そのポートを使っているアプリ | PIDを確認し、tasklistまたはタスクマネージャーで照合 |
| 別のPCのTCP 443番に届くか | 接続元PCのPowerShell:Test-NetConnection 対象名 -Port 443 |
| 自分のPCのUDPポート | PowerShell:Get-NetUDPEndpoint |
例の443は調べたいポート番号に置き換えます。以下はWindowsの状態を確認する操作で、ポートの開放やプロセスの停止は行いません。
コマンドプロンプトでTCPポートを一覧表示する
[スタート]で「cmd」を検索し、コマンドプロンプトを開いて、次を実行します。基本の一覧確認は通常の権限で始められます。
netstat -ano -p tcp
-aは接続と待受、-nはIPアドレスとポートを数値、-oはプロセスID(PID)を表示します。-p tcpではTCPに絞ります。UDPやIPv6も含む全体の一覧を見たい場合はnetstat -anoを使ってください。Microsoft:netstat
次の画像は既存記事の実行画面例です。自分の環境では、IPアドレス、ポート、PID、表示される行数が異なります。

ローカルアドレス・外部アドレス・状態を読む
説明用の出力例です。数値をそのまま自分のPCの設定として使わないでください。
Proto Local Address Foreign Address State PID
TCP 0.0.0.0:443 0.0.0.0:0 LISTENING 1234
TCP 192.168.1.20:51000 203.0.113.10:443 ESTABLISHED 5678
1行目は、このPCのTCP 443番でPID 1234のプロセスが待ち受けています。2行目は、このPCの51000番から相手の443番へ接続済みです。2行目があるだけで、このPCにHTTPSサーバーが動いているとは判断できません。
| 状態 | 読み取れること |
|---|---|
| LISTENING | TCPの接続要求を待っている |
| ESTABLISHED | TCP接続が成立している |
| TIME_WAIT | 終了した接続の情報を一定時間保持している |
| SYN_SENT | 接続要求を送って応答を待っている |
TIME_WAITがあるだけで異常とは限りません。また、この一覧は実行時点の状態です。アプリの終了・起動によって変わるため、問題を再現させた直後に確認すると照合しやすくなります。
特定番号を文字検索するときの注意
netstat -ano | findstr :443
これは行の文字列検索です。ローカル側だけでなく相手側の443番、さらに4430などの一部も一致する可能性があります。結果が出たら、ローカルアドレスの末尾が目的の番号か、状態がLISTENINGかを必ず確認します。厳密に絞る場合は次のPowerShellを使ってください。
PowerShellでポート番号を正確に絞る
[スタート]で「Windows PowerShell」を検索して開きます。Windowsターミナルを使う場合も、プロファイルがPowerShellになっていることを確認してください。次はこのPCのTCP 443番の待受だけを取得します。
Get-NetTCPConnection -LocalPort 443 -State Listen
LocalAddressが待受先アドレス、LocalPortがポート番号、OwningProcessがPIDです。該当する接続がない場合、条件に一致するオブジェクトがない旨のメッセージが出ることがあります。コマンドが正常に動いたかと、対象が見つかったかを分けて読んでください。Microsoft:Get-NetTCPConnection
待受アドレスも接続範囲の手掛かりになります。
| LocalAddressの例 | 意味 |
|---|---|
| 127.0.0.1 または ::1 | そのPC自身からの接続を受けるループバック |
| 0.0.0.0 | すべてのローカルIPv4アドレスを対象に待受 |
| :: | IPv6の全ローカルアドレスを対象に待受。IPv4も扱うかは実装・設定による |
| 192.168.1.20など特定IP | そのローカルアドレスを指定した待受 |
0.0.0.0や::で待ち受けていても、外部へ公開されている保証ではありません。逆に127.0.0.1だけの待受なら、別PCからの接続テストを繰り返す前にアプリの待受設定を確認します。
PIDから使用中のアプリを確認する
一覧のPIDが1234なら、コマンドプロンプトで次を実行します。1234は実際に表示された値へ置き換えてください。
tasklist /FI "PID eq 1234"
または、Ctrl+Shift+Escでタスクマネージャーを開き、[詳細]のPID列と照合します。プロセスが終了していると見つからず、後で同じPIDが別のプロセスに使われる場合もあるため、netstatの確認と続けて行います。Microsoft:tasklist
ポートが競合していても、名前が分からないプロセスをすぐに強制終了しないでください。アプリ名やサービスを特定し、必要ならそのアプリの通常の終了操作、または設定上のポート変更を検討します。
別のPCからTCP接続できるか確認する
接続元のPCでPowerShellを開き、自分が管理するサーバーなど、確認してよい対象を指定します。server.example.comは説明用なので、実際のホスト名かIPアドレスに置き換えてください。
Test-NetConnection server.example.com -Port 443
TcpTestSucceeded : Trueなら、その接続元から指定先・指定ポートへのTCP接続が成功しています。Webページの表示、TLS証明書、認証やアプリの機能まで正常だと証明する結果ではありません。PingSucceededがFalseでも、ICMPだけを遮断している環境ではTCP接続が成功する場合があります。Microsoft:Test-NetConnection
Falseの場合は、対象のホスト名とIP、サーバーの待受、Windowsの受信規則、ルーターやクラウドの経路・規則の順に確認します。ファイアウォール全体を無効にして試すのではなく、対象アプリ・ポート・接続元に必要な規則があるかを調べます。
UDPはTCPと同じ判定をしない
このPCのUDP 53番を確認する例です。
Get-NetUDPEndpoint -LocalPort 53
UDPにはTCPと同じ接続確立やLISTENINGの状態表示がありません。この結果はローカルのエンドポイントの存在を調べるもので、外部からのUDP通信が通ることを示しません。Test-NetConnection -PortもTCP用です。UDPの疎通は、DNSなど対象プロトコルに合った問い合わせと応答で確認します。Microsoft:Get-NetUDPEndpoint
よくある質問
何も出ないときはファイアウォールが原因ですか?
ローカルの待受がない場合は、まずアプリが起動しているか、設定番号が正しいか、TCPとUDPを取り違えていないかを確認します。受信規則を追加しても、アプリの待受自体は作られません。
サーバー自身ではつながるのに、別PCからつながりません
待受がループバック限定でないかを確認します。次に、別PCが使用する宛先IPと経路、受信規則を調べます。同じサーバー内の成功と、別ネットワークからの成功は別の結果として記録してください。
管理者として開く必要はありますか?
基本の一覧は通常権限で確認できます。実行ファイルを表示するnetstat -bなどは十分な権限が必要です。アクセス拒否と、ポートが存在しない結果を混同しないようにします。

コメント