PortQryでTCP/UDPのオープンポートをチェックする方法|Windows向けポートスキャナー活用ガイド
Windowsにはping、telnet、pathpingなど、TCP/IPネットワークの問題を診断するためのツールが数多く用意されています。しかし、リモートサーバー上のポート状態の確認やオープンポートのスキャンを手軽に行えるものは限られています。Portqry.exeは、TCP/IPネットワークにおける各種ネットワークサービスやファイアウォールの動作に関わる問題を診断するために、リモートホストのTCP/UDPポートの応答を確認できる便利なユーティリティです。PortQryは主にtelnetコマンドの高機能な代替として使われており、telnetと異なりUDPポートの開放状況もチェックできる点が大きな特徴です。
PortQryによるUDP/TCPオープンポートのスキャン
Windows Server 2003向けに提供されていた初代PortQryは、Windows Server 2008以降のOSでは正しく動作しないため、後継版のPortQryV2がリリースされています。現在利用すべきはこちらのバージョンです。
Windows 10では、Chocolateyパッケージマネージャーを使って以下のコマンドでインストールできます。
choco install portqry
また、PortQryV2.exeのアーカイブをダウンロードして展開し、コマンドプロンプトを起動してユーティリティのあるディレクトリへ移動しても利用できます。
cd c:\tools\PortQryV2

たとえば、クライアント側からDNSサーバーの可用性を確認したい場合は、TCP/53とUDP/53のポートが開いているかどうかをチェックします。ポート確認コマンドの基本構文は以下のとおりです。
PortQry -n server [-p protocol] [-e || -r || -o endpoint(s)]
- -n:チェック対象サーバーの名前またはIPアドレス
- -e:チェックするポート番号(1〜65535)
- -r:チェックするポートの範囲(例:1:80)
- -p:チェックに使用するプロトコル。TCP、UDP、BOTHから選択(デフォルトはTCP)
補足:TCPポートしか確認できないTest-NetConnection PowerShellコマンドレットと違い、PortQryはTCPとUDPの両方のプロトコルに対応している点が強みです。
今回の例では、コマンドは次のようになります。
PortQry.exe –n 10.0.25.6 -p both -e 53

Portqryは、以下の3種類のポート状態のいずれかを返します。
- Listening — ポートが開放されており(接続を受け付けており)、応答が返ってきた状態。
- Not Listening — 対象システム上に、指定ポートで接続を受け付けるプロセス(サービス)が存在しない状態。UDPポートの場合はICMPの「Destination Unreachable – Port Unreachable」応答、TCPの場合はResetフラグ付きパケットが返されます。
- Filtered — 指定ポートから一切応答がないか、応答がフィルタリングされた状態。つまり、対象システムでそのポートがリッスンしていないか、ファイアウォールなどの設定によりアクセスが制限されています。デフォルトではTCPポートは3回、UDPポートは1回ポーリングされます。
この例では、DNSサーバーがTCP・UDPどちらのポートでもクライアントから利用可能であることが確認できました。
TCP port 53 (domain service): LISTENING UDP port 53 (domain service): LISTENING
-oオプションを使うと、複数のポートをまとめて順番にチェックすることもできます。
portqry -n 10.0.25.6 -p tcp -o 21,110,143
次のコマンドは、ウェルノウンポート(1〜1024番台)の範囲をスキャンし、接続を受け付けているポートの一覧を返します。いわば簡易的なTCPポートスキャナーとして機能します。
portqry -n 10.0.25.6 -r 1:1024 | find ": LISTENING"
スキャン結果をテキストファイルに保存することも可能です。
portqry -n 10.0.25.6 -p tcp -r 20:500 -l scan_port_log.txt
インタラクティブモードの活用
portqryには対話形式で操作できるインタラクティブモードも搭載されています。
portqry –i
PortQry Interactive Modeのプロンプトが表示されたら、リモートコンピューター名とポート番号を指定します。
node srv-lic
set port=80
指定したサーバーのポートをチェックするには、qキーを押してEnterを押します。

-wportおよび-wpid引数を使えば、ローカルホスト上の特定ポート(wport)、あるいは特定プロセスに関連付けられたすべてのポート(wpid)の状態を継続的に監視できます。
たとえば次のコマンドを実行すると、指定したローカルポート(ここではRDPの3389番ポート)の応答を10分間監視し、ステータスに変化があれば管理者へ通知します。詳細ログはLogFile.txtに出力されます。監視を停止するにはCtrl-Cを押してください。
portqry -wport 3389 -wt 600 –l LogFile.txt -y -v
また、ローカルコンピューターのオープンポートとアクティブなTCP/UDP接続の情報を一覧表示することもできます。
portqry.exe -local
PortQryで各種ネットワークサービスのポート状態を確認する
PortQryには一部のネットワークサービスに対する組み込みサポートがあります。具体的には、LDAP、RPC(リモートプロシージャコール)、SMTP/POP3/IMAP4などのメールプロトコル、SNMP、FTP/TFTP、NetBIOSネームサービス、L2TPなどです。単なるポートの開閉確認にとどまらず、サービスの状態を取得するためのプロトコル固有の問い合わせも実行できるのが特長です。
たとえば、次のコマンドでRPCエンドポイントマッパーサービス(TCP/135)の可用性を確認すると、コンピューターに登録されているRPCエンドポイントの一覧(エンドポイント名、UUID、バインド先アドレス、関連アプリケーション)を取得できます。
portqry -n 10.0.25.6 -p tcp -e 135
TCP port 135 (epmap service): LISTENING Using ephemeral source port Querying Endpoint Mapper Database… Server's response: UUID: d95afe72-a6d5-4259-822e-2c84da1ddb0d ncacn_ip_tcp:10.0.25.6 [49152] UUID: 8975497f-93f3-4376-9c9c-fd2277495c27 Frs2 Service ncacn_ip_tcp:10.0.25.6 [5722] UUID: 6b5bd21e-528c-422c-af8c-a4079be4a448 Remote Fw APIs ncacn_ip_tcp:10.0.25.6 [63006] UUID: 12345678-1234-abcd-ef22-0123456789ab IPSec Policy agent endpoint ncacn_ip_tcp:10.0.25.6 [63006] UUID: 367abb81-9844-35f1-ad32-912345001003 ncacn_ip_tcp:10.0.25.6 [63002] UUID: 50cda2a3-574d-40b3-1d66-ee4aaa33a076 ncacn_ip_tcp:10.0.25.6 [56020] …….. UUID: 3c4428c5-f0ab-448b-bda1-6ce01eb0a6d5 DHCP Client LRPC Endpoint ncacn_ip_tcp:10.0.25.6 [49153] Total endpoints found: 61 ==== End of RPC Endpoint Mapper query response ==== portqry.exe -n 10.0.25.6 -e 135 -p TCP exits with return code 0x00000000.
Microsoft SQL Server上で動作するSQL Server Browserサービスの可用性と応答内容も確認できます。
PortQry.exe -n rome-sql01 -e 1434 -p UDP
UDP port 1434 (ms-sql-m service): LISTENING or FILTERED Sending SQL Server query to UDP port 1434... Server's response: ServerName ROME-SQL01 InstanceName MSSQLSERVER IsClustered No Version 15.0.2000.5 tcp 53200 ServerName ROME-SQL01 InstanceName DBINVENT IsClustered No Version 15.0.2000.5 tcp 1433 ==== End of SQL Server query response ==== UDP port 1434 is LISTENING
ご覧のとおり、PortQryは1434/UDPポートの開放状況だけでなく、SQL Serverのバージョン、稼働中のインスタンス名、それぞれのTCPポートまで表示してくれました。DBINVENTインスタンスはデフォルトのTCP/1433でリッスンしており、MSSQLSERVERインスタンスはRPCレンジ内の固定ポートTCP/53200を使用しています。

コミュニティ名を指定すれば、機器のSNMPポートへの問い合わせも可能です。
portqry -n rome-sql1 -cn !snmp_trap! -e 161 -p udp
SMTPサーバーのTCP/25ポートをチェックすれば、SMTPサービスのバナー情報を取得することもできます。
portqry -n mx.woshub.com -p tcp -e 25
GUI版のPortQueryUIについて
もともとPortQryはCUI(コマンドライン)専用ツールでしたが、コマンドプロンプトの扱いに慣れていないユーザーの利便性を考慮して、Microsoftはportqry用のシンプルなグラフィカルインターフェースPortQueryUIを公開しています。Microsoftの公式ダウンロードサイトから入手可能です。
実態としては、PortQueryUIはコマンドを自動生成し、その結果をGUIウィンドウに表示するportqryのフロントエンド(GUIアドオン)です。
さらにPortQueryUIには、主要なMicrosoftサービスの可用性をチェックするための定義済みクエリセットが複数用意されています。
- Domain and trusts(Active Directoryドメインコントローラー上のADDSサービスの確認)
- Exchange Server
- SQL Server
- Networking
- IP Sec
- Web Server
- Net Meeting
PortQueryUIの使い方は直感的で、特別な説明はほぼ不要でしょう。スクリーンショットを見れば一目瞭然です。DNS名またはIPアドレスを入力し、定義済みサービスを選択するか(Query predefined service)、チェックしたいポート番号を手動で入力し(Manually input query ports)、Queryボタンをクリックするだけです。

PortQueryUIの戻りコード(スクリーンショット内でハイライト表示)の意味は以下のとおりです。
- 0(0x00000000)— 接続が正常に確立され、ポートが利用可能な状態。
- 1(0x00000001)— 指定したポートが利用不可、またはフィルタリングされている状態。
- 2(0x00000002)— UDP接続の可用性チェック時に返される通常の戻りコード。ACK応答が返らないことがあるためです。
-
Rubyでポートスキャナーを作成する方法【TCP通信の基礎から実装まで】
なぜポートスキャナーを自作したいと思うのでしょうか? ポートスキャナーの作成は、TCPプロトコルの基礎を学ぶ絶好の方法です。TCPは、HTTPやSSHを含むほとんどのインターネットプロトコルが利用するトランスポート層(伝送層)です。 また、Rubyのネットワークプログラミングの仕組みを深く理解するための良い演習にもなります。 それでは、ポートについての説明から始めましょう! ポートとは何か? 「ポート」というとき、私たちは実際には何を指しているのでしょうか?OS(オペレーティングシステム)レベルにおけるポートとは、単純に言えばプロセスに関連付けられた「ファイルディスクリプタ」のことです。 ファ
-
ルーターのポート開放(ポート転送)のやり方を徹底解説!初心者向けステップバイステップガイド
デフォルト設定では、ルーターはネットワークへの外部からの接続をすべてブロックし、インターネットへの外向きの接続のみを許可することで、最高レベルのセキュリティを維持しています。ルーターを「いくつかのドアや開口部のある巨大な電子の壁」と想像してみてください。ルーターはデジタル世界からのセキュリティシールドとして機能します。インターネットへのアクセスを可能にする事前設定済みのドア(ポート)が用意されている一方、それ以外のポートは厳重に閉ざされており、家庭やオフィスのネットワークへの不正アクセスを防いでいます。 しかし、メールサーバーやゲームサーバー、特定のプログラムやアプリケーションを運用したり、ネ