本記事にはアフィリエイトリンクを含みます。Amazonのアソシエイトとして収益を得る場合があります。

PowerShellでポート疎通確認する方法【ping代替】

PowerShellのアイキャッチ PowerShell
PowerShell

ネットワークの疎通確認をしたいけどpingだとポート番号まで確認できなくて困ったことってありますよね。特にWebサーバーやデータベースへの接続確認ではIPアドレスだけでなくポート番号も含めて「本当に通信できるのか」を確認したい場面が多いと思います。

さらに最近のWindows環境ではファイアウォールがデフォルトでpingの受信を遮断する設定になっているため「pingが通らない=通信できない」とは限らないという難しさもありますよね。

今回はPowerShellを使ってホスト名(またはIPアドレス)とポート番号をセットで疎通確認する方法を解説します。環境に応じて2つのコマンドを使い分けることでより正確なネットワーク診断ができるようになりますよ。

pingコマンドの限界とポート指定確認の必要性

pingではポート番号を確認できない

pingコマンドは便利なネットワーク診断ツールですが、ICMPプロトコルを使用しているためTCP/UDPのポート番号を指定した確認はできません。

例えば以下のようなシーンでは困りますよね。

  • Webサーバー(ポート80や443)が動いているか確認したい。
  • データベース(ポート3306や5432)への接続を確認したい。
  • 特定のアプリケーションポートが開いているか調べたい。

Windowsファイアウォールとpingの関係

また、Windows 10以降のOSではセキュリティ強化のためファイアウォールがデフォルトでICMPエコー要求(ping)をブロックします。このためpingが失敗した原因が「ネットワークが不通」なのか「ファイアウォールで遮断されている」のか判断できないこともあります。

PowerShellのポート指定確認コマンドを使えば、TCP接続を直接試すことでより実用的な疎通確認ができるようになります。

PowerShellでポート疎通を確認する2つの方法

PowerShellにはポート番号を指定して疎通確認できるコマンドが2種類用意されています。それぞれに特徴があるので用途に応じて使い分けましょう。

コマンド名必要なバージョン実行速度出力情報おすすめシーン
Test-ConnectionPowerShell 7.0以上高速True/Falseシンプルな確認、スクリプト組み込み
Test-NetConnectionPowerShell 5.1以上やや遅い詳細情報トラブルシューティング、詳細調査

Test-Connectionコマンドの使い方【高速・シンプル】

基本的な構文

PowerShell 7.0以上が使用可能な環境ではTest-Connectionコマンドが最もシンプルで高速です。実行結果はTrue(疎通可能)またはFalse(疎通不可)で返ってきます。

公式ドキュメントによると以下のような構文となっています。

Test-Connection > TcpPort

Test-Connection  
    [-TargetName] <string[]>  
    -TcpPort <int>  
    [-IPv4]  
    [-IPv6]  
    [-ResolveDestination]  
    [-Source <string>]  
    [-Count <int>]  
    [-Delay <int>]  
    [-Repeat]  
    [-Quiet]  
    [-TimeoutSeconds <int>]  
    [-Detailed]  
    [<CommonParameters>]
参考:Microsoft Learn – Test-Connection

実行例:疎通OKの場合

ローカルホスト(127.0.0.1)のポート8080番に対して疎通確認を行う例です。

PowerShell

この結果は、ポート8080で何らかのサービスが待ち受けておりTCP接続が確立できることを意味します。

実行例:疎通NGの場合

存在しないポート番号(12345番)に対して確認を行った場合です。

PowerShell

Falseが返ってきた場合、以下のいずれかの可能性があります。

  • 指定したポートでサービスが起動していない。
  • ファイアウォールでポートがブロックされている。
  • ネットワーク的に到達できない。

外部サーバーへの接続確認例

実際の業務では外部のWebサーバーやAPIサーバーへの疎通確認も行いますよね。以下はGoogle(8.8.8.8)の53番ポート(DNS)への接続確認例です。

PowerShell

スクリプトでの活用例

Test-Connectionは戻り値がTrue/Falseなので、PowerShellスクリプト内での条件分岐に使いやすいという利点もあります。

PowerShell

Test-NetConnectionコマンドの使い方【詳細情報取得】

基本的な構文

PowerShell 5.1以上(Windows 10標準搭載)で使用可能なTest-NetConnectionはTest-Connectionより詳細な情報を取得できます。ただし実行に若干時間がかかる点には注意が必要です。

公式ドキュメントによると以下のような構文となっています。

Test-NetConnection > RemotePort

Test-NetConnection  
    [[-ComputerName] <String>]  
    -Port <Int32>  
    [-InformationLevel <String>]  
    [<CommonParameters>]
参考:Microsoft Learn – Test-NetConnection

実行例:疎通OKの場合

ローカルホストのポート8080番に対して確認を行った例です。

PowerShell

Test-Connectionと異なり以下の詳細情報が取得できます。

  • RemoteAddress: 接続先のIPアドレス。
  • RemotePort: 接続先のポート番号。
  • InterfaceAlias: 使用されたネットワークインターフェース名。
  • SourceAddress: 接続元のIPアドレス。
  • TcpTestSucceeded: TCP接続が成功したかどうか(True/False)。

実行例:疎通NGの場合

存在しないポート番号への接続を試みた場合です。

PowerShell

注目すべきはPingSucceeded : Trueの部分です。これは「pingは通るけど指定したポートへのTCP接続は失敗した」ことを示しています。この情報があることで、ネットワーク自体は到達可能だがサービスが起動していない(またはファイアウォールでブロックされている)と判断できるわけですね。

トラブルシューティングでの活用

Test-NetConnectionはネットワークトラブルの切り分けに非常に役立ちます。

PowerShell

例えば上記のコマンドでデータベースサーバーのMySQLポート(3306)への接続を確認し、PingSucceededTcpTestSucceededの組み合わせから原因を特定できます。

2つのコマンドの使い分けガイド

どちらのコマンドを使うべきか迷ったときの判断基準をまとめました。

Test-Connectionを使うべきケース

  • PowerShell 7.0以上が利用可能な環境。
  • 単純に「接続できるかどうか」だけを高速に確認したい。
  • スクリプト内で条件分岐に使いたい。
  • 複数のホスト・ポートを連続で確認したい。

Test-NetConnectionを使うべきケース

  • PowerShell 5.1環境(Windows標準)で実行したい。
  • 詳細なネットワーク情報も同時に取得したい。
  • トラブルシューティングで原因を切り分けたい。
  • pingの疎通状況も併せて確認したい。

よくある質問(Q&A)

Q
PowerShellのバージョンはどうやって確認できますか?
A

以下のコマンドで確認できます。

PowerShell

出力されたメジャーバージョンが7以上ならTest-Connectionの-TcpPortオプションが使用可能です。
以下でも簡単に解説してます。
PowerShell最新版へ更新する方法【7.x対応】

Q
ホスト名でも指定できますか?
A

はい、IPアドレスの代わりにホスト名(FQDN)も指定可能です。

PowerShell
Q
複数のポートを一度に確認できますか?
A

Test-Connectionでは配列を使って複数確認できます。

PowerShell
Q
タイムアウト時間を変更できますか?
A

Test-Connectionでは-TimeoutSecondsオプションで指定できます。

PowerShell

Test-NetConnectionはデフォルトで数秒のタイムアウトが設定されています。

Q
UDPポートの確認はできますか?
A

残念ながら両コマンドともTCP接続のみの確認となります。UDPポートの確認には別のツール(Test-NetConnectionの-TraceRouteオプションや専用ツール)が必要です

まとめ

PowerShellでポート番号を指定した疎通確認を行う方法について解説しました。

  • pingコマンドではポート番号を指定した確認ができないよ。
  • Test-Connection(PowerShell 7.0以上)は高速でシンプル、戻り値がTrue/Falseだよ。
  • Test-NetConnection(PowerShell 5.1以上)は詳細情報が取得できて、トラブルシューティングに最適だよ。
当ブログの内容はできる限り正確な情報を提供するよう努めていますが、利用にあたっては自己責任でお願いいたします。
掲載内容に基づく操作・設定などによって生じたトラブルや損害について、当サイトは一切の責任を負いません。
タイトルとURLをコピーしました