使用 PortQry 命令行工具
PortQry 是命令行工具,可用來協助針對 TCP/IP 連線問題進行疑難解答。 此工具會報告本機電腦或遠端電腦上目標 TCP 和用戶數據報通訊協定 (UDP) 埠的狀態。 它也會提供本機計算機埠使用量的詳細資訊。
因為 PortQry 是用來做為疑難解答工具,所以使用它來針對特定問題進行疑難解答的用戶應該有足夠的計算環境知識。
您可以從下列其中一種模式的命令提示字元使用 PortQry:
- 命令行模式。 您可以使用此模式來針對本機或遠端電腦進行疑難解答。
- 本機模式。 在此模式中,您可以使用數個要針對本機計算機進行疑難解答的參數。
- 互動式模式。 類似於命令行模式,但您可以使用快捷方式命令和參數。
注意
您可以下載稱為 PortQryUI 的個別工具,其中包含 PortQry 的圖形化 UI。 PortQryUI 有數個功能,可讓您更輕鬆地使用 PortQry。 若要取得 PortQryUI 工具,請參閱 PortQryUI - PortQry 命令行埠掃描器的使用者介面。
適用於: 支援的 Windows 版本
PortQry 測試和結果
如果目標 UDP 埠未傳回因特網控制訊息通訊協定 (ICMP) 「目的地無法連線」訊息,則一般埠掃描工具會報告埠具有 接聽 狀態。 基於下列其中一個或兩個原因,此結果可能不正確:
- 如果沒有對導向數據報的回應,目標埠可能是 FILTERED。
- 大部分的服務不會回應傳送給他們的未格式化用戶數據報。 一般而言,接聽埠的服務或程式只會回應使用特定會話層或應用層通訊協定的訊息。
若要產生更精確且實用的結果,PortQry 會使用雙步驟測試程式。
步驟 1:埠狀態測試
PortQry 會將埠的狀態報告為三個值之一:
- 接聽:此回應表示進程正在目標埠上接聽。 PortQry 收到來自目標埠的回應。
- NOT LISTENING:此回應表示沒有進程正在目標埠上接聽。 PortQry 從目標埠收到下列其中一個 ICMP 訊息:
目的地無法連線到的埠無法連線
- FILTERED:此回應表示正在篩選目標埠。 PortQry 未收到來自目標埠的回應。 進程可能或可能不會接聽目標埠。 根據預設,PortQry 會在傳回 FILTERED 的回應之前查詢 TCP 通訊埠三次,並在傳回 FILTERED 的回應之前查詢 UDP 埠一次。
步驟 2:特製化測試
如果目標 UDP 埠沒有回應,PortQry 會報告埠為 LISTENING 或 FILTERED。 不過,當您針對連線問題進行疑難解答時,知道埠正在篩選或正在接聽會很有用。 這在包含一或多個防火牆的環境中特別如此。
PortQry 會使用第二組測試來精簡其埠狀態報告,以與在目標埠上接聽的服務或程序互動。 在此測試中,PortQry 會執行下列動作:
- PortQry 會使用位於 %SYSTEMROOT%\System32\Drivers\Etc 資料夾中的服務檔案來判斷每個埠上接聽的服務。
- PortQry 會建立專為預期服務或程式所建構的訊息,然後將該訊息傳送至目標埠。 視服務或程式而定,訊息可能會要求可用於疑難解答的資訊,例如:
- 網域和域控制器資訊 (LDAP 查詢)
- 已註冊的用戶端服務和連接埠 (RPC 查詢)
- 是否允許匿名存取 (FTP 查詢)
- MAC 位址 (NetBIOS 查詢)
- Mspclnt.ini檔案資訊 (ISA 伺服器查詢)
- PortQry 會剖析、格式化,然後從服務或程式傳回回應,做為其測試報告的一部分。
針對本機計算機進行疑難解答的其他測試
當您必須在安裝 PortQry 的電腦上針對埠進行疑難解答時,請在本機模式中使用 PortQry。 當您在命令列使用本機模式參數時,您可以在本機電腦上執行如下的工作:
- 列舉埠對應
- 監視特定埠是否有變更
- 監視特定程式是否有變更
如需詳細資訊,請參閱 在本機 (命令行) 模式中使用 PortQry。
在命令行模式中使用 PortQry
您可以使用與任何其他命令行工具相同的方式,在命令提示字元中執行 PortQry。 本文中的大部分範例都會顯示命令行 PortQry 命令。 在命令行模式中,您可以將多個選項新增至命令字串,以指定要執行的查詢,以及如何執行它。 若要在命令行模式中執行 PortQry,請執行使用下列語法的命令:
portqry.exe -n <name_to_query> [options]
注意
在此命令中, <name_to_query> 是要查詢的IP位址、計算機名稱或網域。 此為必要參數。 [options] 是選擇性參數。
命令行模式的 PortQry 參數
下列參數可在一般命令行模式中使用:
參數 | 描述 | 註解 |
---|---|---|
-n <name> |
查詢特定目的地 |
|
-p <protocol> |
使用指定的通訊協定 |
|
-e <port_number> |
指定目標連接埠(也稱為「連接點」) |
|
-o <port_number>,<port_number> |
依序指定多個目標埠 | port_number,port_number><>值代表以逗號分隔的埠號碼清單,以序列查詢。< 請勿在逗號周圍使用空格。 |
-r <port_number>:<port_number> |
指定目標埠的範圍 |
|
-l <filename.txt> |
產生記錄檔 |
|
-y |
覆寫先前的記錄檔 |
|
-sl |
等待額外的時間回應(也稱為慢速連結延遲) | 使用此參數,在 PortQry 判斷埠為 NOT LISTENING 或已篩選埠之前,PortQry 等候 UDP 埠回應的時間加倍。 當您查詢緩慢或不可靠的網路連結時,一般等候時間可能太短而無法接收回應。 |
-nr |
略過反向名稱查閱 |
|
-sp <port_number> |
從特定來源埠查詢 |
|
-cn !<community_name>! |
查詢SNMP 社群 |
|
-q |
以無訊息模式執行 PortQry |
|
命令行模式中參數的備註
- 任何埠號碼值都必須是介於 1 到 65535 之間的有效埠號碼,且包含 。
-e
、-o
和-r
參數互斥。 單一 PortQry 命令只能使用其中一個參數。- UDP 連接埠 389 (LDAP) 的查詢可能無法針對執行 Windows Server 2008 的域控制器運作。 若要檢查 UDP 連接埠 389 上執行之服務的可用性,您可以使用 Nltest 而不是 PortQry。 如需詳細資訊,請參閱 Nltest。
- 當您使用
-e
或-o
查詢埠 135 (RPC) 時,PortQry 會傳回目前向 RPC 端點對應程式註冊的所有端點。重要
當您使用
-r
時,PortQry 不會查詢 RPC 端點對應程式。 - 當您查詢埠 53 (DNS) 時,PortQry 會使用 TCP 和 UDP 來傳送 DNS 查詢
portqry.microsoft.com
。 如果伺服器傳回回應,PortQry 會判斷埠為 LISTENING。注意
DNS 伺服器傳回正回應或負回應並不重要。 任何回應都表示埠正在接聽。
在本機 (命令行) 模式中使用 PortQry
除了在遠端目標電腦上查詢埠,您也可以在本機模式中使用 PortQry 來取得有關 PortQry 執行所在本機電腦上的 TCP 連接埠和 UDP 連接埠的詳細資訊。 使用下列語法在本機模式中執行 PortQry:
portqry -local | -wpid <pid> | -wport <port_number> [-wt <seconds>] [-l <filename.txt>] [-v]
此語法中的佔位元會在下列本機模式參數的表格中說明:
參數 | 描述 | 註解 |
---|---|---|
-local |
擷取本機資訊 |
|
-wport <port_number> |
監看埠 |
|
-wpid <pid> |
監看程式識別碼 (PID) |
|
-wt <seconds> |
檢查特定間隔 |
|
-l <filename.txt> |
產生記錄檔 |
|
-y |
覆寫先前的記錄檔 |
|
-v |
產生詳細信息輸出 | PortQry 會提供螢幕輸出的其他詳細資料(以及如果使用的記錄檔)。 |
本機模式中參數的備註
-local
、-wport
和-wpid
參數互斥。 在單一 PortQry 命令字串中,您只能使用其中一個參數。- 參數
-q
無法在本機模式中運作。 - 在某些情況下,PortQry 可能會報告系統閑置進程 (PID 0) 正在使用一些 TCP 連接埠。 如果本機程式連線到 TCP 連接埠,然後停止,就可能發生此行為。 即使程式不再執行,但程式與埠的 TCP 連線可能會保留數分鐘的「計時等候」狀態。 在這種情況下,PortQry 可能會偵測到埠正在使用中,但無法識別使用埠的程式,因為 PID 已發行。 根據預設,埠會維持在最長區段存留期兩倍的「計時等候」狀態。
- 針對每個程式,PortQry 會報告可以存取的資訊。 某些資訊的存取受到限制。 例如,禁止存取Idle和 CSRSS 程式的模組資訊,因為其存取限制會防止使用者層級程式代碼開啟它們。 為了獲得最佳結果,請在本機系統管理員或具有類似認證的帳戶內容中執行本機模式命令。
- 當您搭配 使用
-wport
或-wpid
-l
時,請使用 Esc 鍵來中斷和結束 PortQry,而不是 CTRL+C。 您必須按 Esc 鍵,確定 PortQry 正確關閉記錄檔並結束。 如果您按 CTRL+C 而不是 Esc 來停止 PortQry,記錄檔可能會變成空白或損毀。
在互動式模式中使用 PortQry
當您針對計算機之間的連線問題進行疑難解答時,可能必須輸入許多重複的命令。 在互動式模式中使用 PortQry 可以更輕鬆地執行這類動作。
互動式模式類似於 Nslookup DNS 公用程式或 Nblookup WINS 公用程式中的互動式功能。
若要在互動式模式中啟動 PortQry,請使用 -i
參數。 例如,執行下列命令:
portqry -i
此指令輸出類似下列摘錄:
Portqry Interactive Mode
Type 'help' for a list of commands
Default Node: 127.0.0.1
Current option values:
end port= 80
protocol= TCP
source port= 0 (ephemeral)
>
互動式模式命令
您可以在互動式模式中使用下列命令:
Command | 描述 | 註解 |
---|---|---|
node <name> 或 n <name> |
將目的地設定為查詢 |
|
query 或 q |
傳送查詢 |
|
set <option>=<value> |
設定查詢選項的值 |
|
exit |
離開互動式模式 |
互動式模式查詢快捷方式
您可以使用下列快捷方式搭配 query
命令來執行一般查詢,而不需要設定埠和通訊協議選項。 使用下列語法:
q <shortcut>
注意
在此命令中, <快捷方式> 代表下表的其中一個快捷方式。 如果您省略快捷方式,命令會 q
查詢 TCP 連接埠 80。
捷徑 | 要查詢的埠 |
---|---|
dns |
TCP 連接埠 53、UDP 連接埠 53。 |
ftp |
TCP 連接埠 21 |
imap |
TCP 連接埠 143 |
ipsec |
UDP 埠 500 |
isa |
TCP 連接埠 1745、UDP 連接埠 1745 |
ldap |
TCP 連接埠 389、UDP 連接埠 389 |
l2tp |
UDP 埠 1701 |
mail |
TCP 連接埠 25、110 和 143 |
pop3 |
TCP 連接埠 110 |
rpc |
TCP 連接埠 135、UDP 連接埠 135 |
smtp |
TCP 連接埠 25 |
snmp |
UDP 埠 161 |
sql |
TCP 連接埠 1433、UDP 連接埠 1434 |
tftp |
UDP 埠 69 |
例如,以互動模式輸入 q dns
相當於在一般命令行模式中執行 portqry -n 127.0.0.1 -p both -e 135
。
互動式模式選項
您可以使用 set
命令來設定選項,例如來源埠或連結延遲緩慢。 使用下列語法:
set <option>=<value>
注意
在此命令中,<option> 代表要設定的選項名稱,而< value> 代表選項的新值。
選項 | 描述 | 註解 |
---|---|---|
set all |
顯示選項的目前值 | |
set port=<port_number> set e=<port_number> |
指定目標埠 | <>port_number值代表在目的地計算機上查詢的埠。 |
set sport=<port_number> set sp=<port_number> |
指定來源埠 |
|
set protocol=<protocol> set p=<protocol> |
指定要使用的通訊協定 | 通訊 <協定> 值代表要查詢的埠類型(tcp 、 udp 或 both )。 |
set cn=<community_name> |
指定SNMP 社群 |
|
set nr |
關閉或開啟反向名稱查閱 |
|
set sl |
開啟或關閉慢速連結延遲 |
|
假設您想要查詢IP位址為10.0.1.10的電腦。 在互動式模式命令提示字元中,輸入 n 10.0.1.10
。 這個指令會產生類似下列摘錄的輸出:
Default Node: 10.0.1.10
>
若要傳送 DNS 查詢,請在互動式模式命令提示字元中輸入 q dns
。 這個指令會產生類似下列摘錄的輸出:
resolving service name using local services file...
UDP port resolved to the 'domain' service
IP address resolved to myserver.contoso.com
querying...
UDP port 53 (domain service): LISTENING
>
自定義埠與服務之間的關聯
根據預設,每個 Windows 計算機都有位於 %SYSTEMROOT%\System32\Drivers\Etc 資料夾中的服務檔案。 PortQry 會使用此檔案,將埠號碼解析為其對應的服務名稱。 PortQry 會使用這項資訊來選取其查詢的格式。 您可以編輯此檔案,以指示 PortQry 將格式化的訊息傳送至替代埠。 例如,下列專案會出現在一般 Services 檔案中:
ldap 389/tcp #Lightweight Directory Access Protocol
您可以編輯此埠專案,或新增其他專案。 若要強制 PortQry 將 LDAP 查詢傳送至埠 1025,請修改專案,如下所示:
ldap 1025/tcp #Lightweight Directory Access Protocol
範例
下列範例示範如何使用 PortQry 及其參數:
本機模式
命令行模式
查詢本機計算機
輸出 portqry -local
類似下列摘錄:
TCP/UDP Port Usage
96 active ports found
Port Local IPState Remote IP:Port
TCP 80 0.0.0.0 LISTENING 0.0.0.0:18510
TCP 80 169.254.149.9 TIME WAIT 169.254.74.55:3716
TCP 80 169.254.149.9 TIME WAIT 169.254.200.222:3885
TCP 135 0.0.0.0 LISTENING 0.0.0.0:10280
UDP 135 0.0.0.0 :
UDP 137 169.254.149.9 :
UDP 138 169.254.149.9 :
TCP 139 169.254.149.9 LISTENING 0.0.0.0:43065
TCP 139 169.254.149.9 ESTABLISHED 169.254.4.253:4310
TCP 139 169.254.149.9 ESTABLISHED 169.254.74.55:3714
在存取受到限制時查詢本機計算機
當您以本機模式執行 PortQry 時,如上一個範例所示,您可能會看到類似下列摘錄的輸出。 這類輸出表示 PortQry 所使用的安全性內容沒有足夠的許可權可存取它所要求的所有資訊。
Port and Module Information by Process
Note: restrictions applied to some processes may
prevent Portqry from accessing more information
For best results run Portqry in the context of
the local administrator
======================================================
Process ID: 0 (System Idle Process)
PIDPortLocal IPState Remote IP:Port
0TCP 4442 169.254.113.96 TIME WAIT 169.254.5.136:80
0TCP 4456 169.254.113.96 TIME WAIT 169.254.5.44:445
Port Statistics
TCP mappings: 2
UDP mappings: 0
TCP ports in a TIME WAIT state: 2 = 100.00%
Could not access module information for this process
======================================================
使用特定間隔監視進程標識碼
下列命令會監視特定行程:
portqry.exe -wpid 1276 -wt 2 -v -l pid.txt
因此,PortQry 會採取下列動作:
- 識別具有 1276 PID 的進程,並檢查它每兩秒使用一次的埠狀態,直到您按 Esc 鍵為止。
- 建立記錄檔 pid.txt。 如果已有該名稱的檔案存在,PortQry 會提示您確認要覆寫檔案。
- 記錄記錄檔中的任何輸出,包括額外的詳細信息輸出。
記錄檔的內容類似下列摘錄:
PortQry Version 2.0 Log File
System Date: <DateTime>
Command run:
portqry -wpid 1276 -wt 2 -v -l pid.txt
Local computer name:
host123
Watching PID: 1276
Checking for changes every 2 seconds
verbose output requested
Service Name: DNS
Display Name: DNS Server
Service Type: runs in its own process
============
System Date: <DateTime>
======================================================
Process ID: 1276 (dns.exe)
Service Name: DNS
Display Name: DNS Server
Service Type: runs in its own process
PIDPortLocal IPState Remote IP:Port
1276TCP 53 0.0.0.0 LISTENING 0.0.0.0:2160
1276TCP 1087 0.0.0.0 LISTENING 0.0.0.0:37074
1276UDP 1086 0.0.0.0 :
1276UDP 2126 0.0.0.0 :
1276UDP 53 127.0.0.1 :
1276UDP 1085 127.0.0.1 :
1276UDP 53 169.254.11.96 :
Port Statistics
TCP mappings: 2
UDP mappings: 5
TCP ports in a LISTENING state: 2 = 100.00%
Loaded modules:
C:\WINDOWS\System32\dns.exe (0x01000000)
C:\WINDOWS\system32\ntdll.dll (0x77F40000)
C:\WINDOWS\system32\kernel32.dll (0x77E40000)
C:\WINDOWS\system32\msvcrt.dll (0x77BA0000)
C:\WINDOWS\system32\ADVAPI32.dll (0x77DA0000)
C:\WINDOWS\system32\RPCRT4.dll (0x77C50000)
C:\WINDOWS\System32\WS2_32.dll (0x71C00000)
C:\WINDOWS\System32\WS2HELP.dll (0x71BF0000)
C:\WINDOWS\system32\USER32.dll (0x77D00000)
C:\WINDOWS\system32\GDI32.dll (0x77C00000)
C:\WINDOWS\System32\NETAPI32.dll (0x71C40000)
指定目標和通訊協定
注意
本節中的每個範例都會查詢埠 80,也就是預設埠。
下列指令會查詢使用其完整功能變數名稱 (FQDN) 所指定電腦上的預設 TCP 連接埠:
portqry -n myDomainController.example.com -p tcp
下列命令會查詢使用電腦名稱指定之電腦上的預設 UDP 連接埠:
portqry -n myServer -p udp
下列命令會查詢使用其 IP 位址指定之電腦的預設 TCP 和 UDP 連接埠:
portqry -n 192.168.1.20 -p both
下列命令會執行與上一個命令相同的查詢,但會略過名稱解析步驟:
portqry -n 192.168.1.20 -p both -nr
下列命令會查詢 Web 伺服器的預設 TCP 連接埠:
portqry -n www.widgets.microsoft.com
指定一或多個目標埠
下列命令會藉由查詢 TCP 連接埠 25 來測試郵件伺服器的 SMTP 服務:
portqry -n mail.example.com -p tcp -e 25
下列命令會查詢IP位址為192.168.1.20的電腦 TCP連接埠 60897 和 UDP 連接埠 60897:
portqry -n 192.168.1.20 -p both -e 60897
下列指令會在電腦 「myServer」 上查詢 UDP 連接埠 139、1025 和 135 (依該順序) :
portqry -n myServer -p udp -o 139,1025,135
下列命令會查詢電腦 「myServer」 上埠從埠 135 到埠 139(含)的範圍:
portqry -n myServer -p udp -r 135:139
指定 PortQry 輸出的記錄檔
下列命令會在 mail.widgets.microsoft.com 上查詢 TCP 連接埠 143,並記錄portqry.txt檔案中的輸出。 如果檔案已經存在,PortQry 會覆寫它,而不會提示確認。
portqry -n mail.widgets.microsoft.com -p tcp -e 143 -l portqry.txt -y
查詢緩慢連結
下列命令會在 mail.widgets.microsoft.com 上查詢 TCP 連接埠 143、110 和 25。 針對每個目標埠,PortQry 會等候一般回應的兩倍。
portqry -n mail.widgets.microsoft.com -p tcp -o 143,110,25 -sl
指定來源埠
下列命令會使用本機計算機上的 UDP 連接埠 3001(如果有的話)將查詢傳送至 192.168.1.20 上的 UDP 連接埠 53。 如果服務正在接聽該埠並回應查詢,則會將回應傳送至本機計算機上的 UDP 連接埠 3001。
portqry -p udp -e 53 -sp 3001 -n 192.168.1.20
下列命令會使用本機計算機上的UDP埠3000(如果有的話)將查詢傳送至 myDomainController.contoso.com 上的UDP連接埠389。 根據預設,LDAP 服務應該在此埠上接聽。 如果LDAP服務回應第一個查詢,PortQry 會使用暫時的來源埠來傳送格式化的查詢並接收任何回應。
portqry -n myDomainController.contoso.com -e 389 -sp 3000
使用批處理檔以無訊息模式執行 PortQry
下列文字是批處理檔範例,以無訊息模式執行 PortQry:
:Top
portqry -n 169.254.18.22 -e 443 -nr -l pqlog.txt -q
:end
當此批處理文件執行時,PortQry 會產生名為 pqlog.txt 的記錄檔。 此檔案的內容如下所示:
PortQry Version 2.0 Log File
System Date: Thu Sep 16 10:35:03 2021
Command run:
portqry -n 169.254.18.22 -e 443 -nr -l pqlog.txt -q
Local computer name:
SOURCESERVER
Querying target system called:
169.254.18.22
TCP port 443 (https service): LISTENING
========= end of log file =========
查詢連接埠 135 (RPC 服務)
下列命令會查詢 myServer 電腦上的 UDP 連接埠 135。 根據預設,RPC 服務應該在此埠上接聽。
portqry -n myServer -p udp -e 135
因此,PortQry 會採取下列動作:
- PortQry 會使用 %SYSTEMROOT%\System32\Drivers\Etc 資料夾中的服務檔案,將 UDP 連接埠 135 解析為服務。 使用預設組態,PortQry 會將埠解析為 RPC 端點對應程式服務 (Epmap)。
- PortQry 會將未格式化的用戶數據報傳送至目的地電腦上的 UDP 連接埠 135。
PortQry 不會收到來自目標埠的回應。 這是因為 RPC 端點對應程式服務只會回應格式正確的 RPC 查詢。 PortQry 會報告埠為 LISTENING 或 FILTERED。 - PortQry 會建立格式正確的 RPC 查詢,以要求目前向 RPC 端點對應程式註冊的所有端點。 PortQry 會將此查詢傳送至目的地電腦上的 UDP 連接埠 135。
- 根據回應而定,PortQry 會採取下列其中一個動作:
- 如果 PortQry 收到此查詢的回應,PortQry 會將整個回應傳回給使用者,並報告埠為 LISTENING。
- 如果 PortQry 未收到此查詢的回應,則會報告埠為 FILTERED。
UDP port 135 (epmap service): LISTENING or FILTERED
Querying Endpoint Mapper Database...
Server's response:
UUID: 50abc2a4-574d-40b3-9d66-ee4fd5fba076
ncacn_ip_tcp:169.254.12.191[4144]
UUID: ecec0d70-a603-11d0-96b1-00a0c91ece30 NTDS Backup Interface
ncacn_np:\\MYSERVER[\PIPE\lsass]
UUID: e3514235-4b06-11d1-ab04-00c04fc2dcd2 MS NT Directory DRS Interface
ncacn_ip_tcp:169.254.12.191[1030]
UUID: e3514235-4b06-11d1-ab04-00c04fc2dcd2 MS NT Directory DRS Interface
ncadg_ip_udp:169.254.12.191[1032]
UUID: 12345678-1234-abcd-ef00-01234567cffb
ncacn_np:\\MYSERVER[\PIPE\lsass]
UUID: 12345678-1234-abcd-ef00-01234567cffb
ncacn_np:\\MYSERVER[\PIPE\POLICYAGENT]
Total endpoints found: 6
==== End of RPC Endpoint Mapper query response ====
UDP port 135 is LISTENING
從這個輸出中,您不僅可以判斷服務是否在埠上接聽,還可以判斷目的地計算機上的 RPC 端點對應程式資料庫已註冊哪些服務或程式。 輸出包含每個程式的通用唯一標識碼 (UUID),加上批注名稱(如果有),每個程式使用的通訊協定、程式系結的網路位址,以及程式以方括弧括住程式的端點。
注意
當您在 PortQry 命令中指定 -r
選項以掃描埠範圍時,PortQry 不會查詢 RPC 端點對應程式以取得端點資訊。 此參數可加速掃描一系列埠。