使用 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 收到來自目標埠的回應。
-
不接聽:此回應表示目標埠上沒有進程正在接聽。 PortQry 從目標埠收到下列其中一個 ICMP 訊息:
無法連線到目的地埠
- FILTERED:此回應表示正在篩選目標埠。 PortQry 未收到來自目標埠的回應。 進程不一定正在目標埠上接聽。 根據預設,PortQry 會先查詢 TCP 連接埠三次,再傳回 FILTERED 的回應,然後在傳回 FILTERED 的回應之前查詢 UDP 埠一次。
步驟 2:特製化測試
如果沒有來自目標 UDP 埠的回應,PortQry 會報告埠為 LISTENING 或 FILTERED。 不過,當您針對連線問題進行疑難解答時,瞭解埠是否正在篩選或正在接聽很有用。 這在包含一或多個防火牆的環境中尤其如此。
PortQry 會使用第二組測試來精簡其埠狀態報告,以與接聽目標埠的服務或程序互動。 針對這項測試,PortQry 會執行下列動作:
- PortQry 會使用位於 %SYSTEMROOT%\System32\Drivers\Etc 資料夾中的 Services 檔案,來判斷每個埠上接聽的服務。
- PortQry 會建立特別針對預期的服務或程式建構的訊息,然後將該訊息傳送至目標埠。 根據服務或程式,訊息可能會要求適用於疑難解答的資訊,如下所示:
- LDAP 查詢 (網域和域控制器資訊)
- 已註冊的用戶端服務和埠 (RPC 查詢)
- FTP 查詢 (是否允許匿名存取)
- NETBIOS 查詢 (MAC 位址)
- Mspclnt.ini ISA Server 查詢 (檔案資訊)
- PortQry 會剖析、格式化,然後從服務或程式傳回回應,作為其測試報告的一部分。
針對本機計算機進行疑難解答的其他測試
當您必須在安裝 PortQry 的電腦上針對埠進行疑難解答時,請在本機模式中使用 PortQry。 當您在命令列使用本機模式參數時,可以在本機電腦上執行下列工作:
- 列舉埠對應
- 監視特定埠的變更
- 監視特定程序的變更
如需詳細資訊,請 參閱在本機 (命令行) 模式中使用 PortQry。
在命令行模式中使用 PortQry
您可以使用與任何其他命令行工具相同的方式,在命令提示字元中執行 PortQry。 本文中的大部分範例都會顯示命令行 PortQry 命令。 在命令行模式中,您可以將多個選項新增至命令字串,以指定要執行的查詢以及執行方式。 若要在命令行模式中執行 PortQry,請執行使用下列語法的命令:
portqry.exe -n <name_to_query> [options]
注意事項
在此命令中, <name_to_query> 是要查詢的IP位址、計算機名稱或網域。 這是必要參數。 [options] 是選擇性參數。
命令行模式的 PortQry 參數
下列參數可在一般命令行模式中使用:
參數 | 描述 | Comments |
---|---|---|
-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 等候 UDP 埠回應的時間加倍,然後 PortQry 會判斷埠未接聽或已篩選。 當您查詢速度緩慢或不可靠的網路連結時,一般等候時間可能太短而無法接收回應。 |
-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 來傳送 的
portqry.microsoft.com
DNS 查詢。 如果伺服器傳回回應,PortQry 會判斷埠為 LISTENING。注意事項
DNS 伺服器傳回正回應或負回應並不重要。 任何回應都表示埠正在接聽。
在本機 (命令行) 模式中使用 PortQry
您可以在本機模式中使用 PortQry 來取得有關執行 PortQry 之本機電腦上 TCP 連接埠和 UDP 連接埠的詳細資訊,而不是查詢遠端目標電腦上的埠。 使用下列語法在本機模式中執行 PortQry:
portqry -local | -wpid <pid> | -wport <port_number> [-wt <seconds>] [-l <filename.txt>] [-v]
下表的本機模式參數說明此語法中的佔位元:
參數 | 描述 | Comments |
---|---|---|
-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)
>
互動式模式命令
您可以在互動式模式中使用下列命令:
命令 | 描述 | Comments |
---|---|---|
node <name> 或 n <name> |
設定要查詢的目的地 |
|
query 或 q |
傳送查詢 |
|
set <option>=<value> |
設定查詢選項的值 |
|
exit |
保持互動模式 |
互動式模式查詢快捷方式
您可以使用下列快捷方式搭配 query
命令來執行一般查詢,而不需要設定埠和通訊協議選項。 使用下列語法:
q <shortcut>
注意事項
在此命令中, <快捷方式> 代表下表中的其中一個快捷方式。 如果您省略快捷方式,命令會 q
查詢 TCP 連接埠 80。
Shortcut | 要查詢的埠 |
---|---|
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> 則代表選項的新值。
選項 | 描述 | Comments |
---|---|---|
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> |
指定要使用的通訊協定 | 通訊<協定>值代表要 (、 udp 或 both ) tcp 查詢的埠類型。 |
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 資料夾中的 Services 檔案。 PortQry 會使用此檔案,將埠號碼解析為其對應的服務名稱。 PortQry 會使用此資訊來選取其查詢的格式。 您可以編輯此檔案,以指示 PortQry 將格式化的訊息傳送至替代埠。 例如,下列專案會出現在一般服務檔案中:
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,也就是預設埠。
下列命令會查詢電腦上的預設 TCP 連接埠,該電腦使用其完整功能變數名稱 (FQDN) :
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
下列命令會查詢網頁伺服器的預設 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
下列命令會查詢該順序中的 UDP 連接埠 139、1025 和 135 (,) 計算機 “myServer” 上:
portqry -n myServer -p udp -o 139,1025,135
下列命令會查詢埠 135 到埠 139 的埠範圍, (計算機 “myServer” 上的內含) :
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
指定來源埠
如果本機計算機上的) 可將查詢傳送至 192.168.1.20 上的 UDP 連接埠 53,則下列命令會使用 UDP 連接埠 3001 (。 如果服務正在該埠上接聽並回應查詢,它會將回應傳送至本機計算機上的 UDP 連接埠 3001。
portqry -p udp -e 53 -sp 3001 -n 192.168.1.20
如果可在本機計算機上) 將查詢傳送至 myDomainController.contoso.com 上的 UDP 連接埠 389,則下列命令會使用 UDP 連接埠 3000 (。 根據預設,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 資料夾中的 Services 檔案,將 UDP 連接埠 135 解析為服務。 使用預設組態,PortQry 會將埠解析為 RPC 端點對應程式服務, (Epmap) 。
- PortQry 會將未格式化的用戶數據報傳送至目的地電腦上的 UDP 連接埠 135。
PortQry 不會收到來自目標埠的回應。 這是因為 RPC 端點對應程式服務只會回應格式正確的 RPC 查詢。 PortQry 報告埠為 LISTENING 或 FILTERED。 - PortQry 會建立格式正確的 RPC 查詢,以要求目前向 RPC 端點對應程式註冊的所有端點。 PortQry 會將此查詢傳送至目的地電腦上的 UDP 連接埠 135。
- 根據回應,PortQry 會採取下列其中一個動作:
- 如果 PortQry 收到此查詢的回應,PortQry 會將整個回應傳回給使用者,並報告埠正在 接聽。
- 如果 PortQry 未收到此查詢的回應,則會報告埠已 篩選。
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 端點對應程式以取得端點資訊。 此參數可加速掃描埠範圍。