PortQryを使って開いているTCPポートとUDPポートをスキャンする方法

Windowsのネットワークトラブルシューティングは、特に特定のポートが開いているか、リッスンしているか、ファイアウォールでブロックされているかを確認するのに、少々手間がかかることがあります。Windows標準のツール(Windows 8.1pingなど)telnetは便利ですが、UDPポートの確認やネットワークサービスの詳細なステータス取得など、どうしても不十分な場合もあります。そんな時にPortqry.exeが役立ちます。これはポートスキャン用のtelnetのより強力で柔軟なバージョンのようなもので、TCPとUDPの両方のプロトコルに対応しています。正直なところ、telnetでは明確な回答が得られなかった環境では、Portqry.exeのおかげで多くの悩みの種から解放されました。

セットアップはそれほど複雑ではありませんが、PortQryV2(最新バージョン。オリジナル版は新しいWindowsバージョンでは動作しないため)を入手する必要があります。こちらから入手できます。ダウンロード後、アーカイブを など分かりやすい場所に解凍し、c:\tools\PortQryV2そのディレクトリでPowerShellまたはコマンドプロンプトを開いてください。そうすれば、 などのコマンドを実行できますportqry.exe

PortQryを修正してポートをスキャンする方法

リモートサーバーの開いているポートをスキャンする

DNSサーバーまたはWebサーバーのポートが開いているかどうかを確認したいとします。次のようなコマンドを実行します。

portqry.exe -n 10.0.25.6 -p both -e 53

これは、対象のIPアドレスまたはホスト名のTCPポートとUDPポートの両方の53番ポートをチェックします。結果には、ポートがLISTENINGNOT LISTENING、またはFILTEREDのいずれの状態であるかが表示されます。例えば、LISTENINGLISTENINGと表示されている場合、ポートは開いていてアクティブです。そうでない場合は、ファイアウォールがブロックしているか、サービスが実行されていない可能性があります。

一部のマシンでは、ポートの応答が一定しない場合があります。ネットワークポリシーや一時的なファイアウォールルールにより、ポートがフィルターされていると表示されることがあります。少し奇妙に感じるかもしれませんが、再確認するか再起動すると改善する場合があります。また、一部のコマンドでは、コマンドプロンプトを管理者として実行する必要がある場合があります。

特定の範囲または複数のポートを確認する

1 ~ 1024 のような範囲をスキャンしたい場合は、出力をパイプするか、次のようにします。

portqry.exe -n 10.0.25.6 -r 1:1024 | find ": LISTENING"

指定した範囲の開いているポートが一覧表示されます。複数のポートを素早くスポットチェックする必要がある場合に便利です。結果を保存するには、以下の-lパラメータを追加するだけです。

portqry.exe -n 10.0.25.6 -p tcp -r 20:500 -l scan_log.txt

すべてをテキストファイルに記録し、後で確認できるようにします。Windows は、簡単な確認作業のために、必要以上に手間がかかるようにしているからです。

時間の経過に伴うポートの監視

断続的な問題のトラブルシューティングを行う場合や、一定期間にわたってポートを監視したい場合は、インタラクティブモードまたは監視オプションを使用できます。例えば、ポート3389(RDP)を10分間監視する場合などです。

portqry.exe -wport 3389 -wt 600 -l LogFile.txt -v

qを押せばいつでも停止できます。ポートの状態が変わったら通知してくれるのは便利ですね。ある設定ではうまくいったのですが、別の設定ではファイアウォールやサービスを調整しないとうまくいきませんでした。ポートブロックが疑われる場合や、リモートサーバーがリッスンしているかどうかを確認する必要がある場合は、間違いなく便利です。

高度なサービスチェックとプロトコル固有の情報

PortQryはポートスキャンだけではありません。RPCエンドポイントマッパー(ポート135)、SQL Server(ポート1434 UDP)、SMTP(ポート25 TCP)といった特定のサービスに対してクエリを実行できます。例えば、RPCをチェックするには次のようにします。

portqry.exe -n 10.0.25.6 -p tcp -e 135

これは、RPCエンドポイントマッパーがリッスンしているかどうかを示し、登録済みのエンドポイント、UUID、および関連サービスに関する詳細情報を返します。WindowsサービスやActive Directoryの問題の診断に非常に便利です。SQLサーバーでも同様です。UDPポート1434をチェックすると、ポートが開いているかどうかだけでなく、インスタンス名とバージョンも確認できます。これは少し奇妙ですが、便利です。

portqry.exe -n rome-sql01 -e 1434 -p UDP

プレーンテキストUDPポート1434(ms-sql-m):LISTENINGまたはFILTERED。サーバー応答にはインスタンス情報、バージョンなどが含まれます。この詳細な情報は、クラスタリングの問題、SQL接続、またはポートだけでなく特定のサービスをブロックするファイアウォールルールのトラブルシューティングに役立ちます。なぜこれが機能するのかは不明ですが、一部の設定では、他のツールが開いている/閉じている情報のみを報告するのに対し、このツールは詳細なサービス情報を取得するようです。

コマンドラインが苦手な人のためのGUIバージョン

コマンドプロンプトの操作が苦手な方は、MicrosoftのPortQueryUIというGUIツールをご利用ください。基本的にはPortQueryUIと同じですが、より使いやすい設計になっています。こちらからダウンロードしてください。サーバー名またはIPアドレスを入力し、必要なサービスまたはポートを選択してクエリを実行するだけで、すぐに結果が表示されます。簡単なチェックや、コマンドを覚えたくない場合に最適です。

一般的なMicrosoftサービス向けの定義済みセットも用意されているので、ポート番号を気にすることなく、Active Directoryポート、Exchange、SQL、IPsecなどを確認できます。CLIよりもビジュアルツールを好む方には、迷わずおすすめです。

実使用では、PortQry はかなり信頼できると感じましたが、ファイアウォールやネットワークポリシーによって結果が狂うこともあります。そのため、フィルタリングされたポートが必ずしも永久にブロックされているとは限らないことに注意してください。一部の環境では、最初は失敗しましたが、再起動やファイアウォールの簡単な調整で解決しました。これは、Windows がネットワークテストを本来よりも少し難しくしている傾向があるためです。

これで誰かの時間を少しでも節約できれば嬉しいです。完璧ではありませんが、他のツールでは足りない部分を補ってくれます。

まとめ

  • Microsoft の公式サイトから PortQryV2 をダウンロードします。
  • コマンド プロンプトまたは PowerShell でコマンドを実行するか、CLI に慣れていない場合は PortQueryUI を使用します。
  • 特定のポートまたは範囲を簡単に確認できます。
  • 詳細なステータス情報を取得するには、RPC、SQL、SMTP などのサービスを照会します。
  • 断続的な問題を検出するために、必要に応じてポートを継続的に監視します。

まとめ

PortQryは非常に便利なツールで、特に従来の方法では明確な答えが得られない場合に、ツールボックスに備えておく価値があります。少し使いにくい部分もありますが、一度使い方を覚えれば、ネットワークポートの問題のトラブルシューティングがはるかに楽になります。ネットワーク関連の問題は複雑に絡み合うことがあるため、トラブルシューティング全体のワークフローの一部として活用してください。このツールが、誰かのネットワーク設定をより深く理解するのに役立つことを願っています。私の場合はうまくいきましたので、皆さんにも役立つことを願っています。