Windowsでポートが開いているか確認するコマンド|netstat・PowerShell

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サーバーが動いているとは判断できません。

状態読み取れること
LISTENINGTCPの接続要求を待っている
ESTABLISHEDTCP接続が成立している
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などは十分な権限が必要です。アクセス拒否と、ポートが存在しない結果を混同しないようにします。

この記事を書いた人

実務の現場で詰まりがちなポイントを地図にするITブログ「IT trip」を運営。Windows/Office(Teams・Excel)からSQL、サーバ運用、ガジェットまで、再現性のある手順と“なぜそうなるか”を丁寧に解説します。読んだらすぐ試せること、そして迷った人の次の一歩が見えることを大切にしています。

コメント

コメントする

目次