使用 PortQry 命令行工具

PortQry 是一种命令行工具,可用于帮助排查 TCP/IP 连接问题。 此工具报告本地计算机或远程计算机上的目标 TCP 和用户数据报协议 (UDP) 端口的状态。 它还提供有关本地计算机的端口使用情况的详细信息。

由于 PortQry 旨在用作故障排除工具,因此使用它来排查特定问题的用户应充分了解其计算环境。

可以在多种模式之一的命令提示符中使用 PortQry:

  • 命令行模式。 可以使用此模式对本地或远程计算机进行故障排除。
  • 本地模式。 在此模式下,可以使用多个用于对本地计算机进行故障排除的参数。
  • 交互模式。 类似于命令行模式,但可以使用快捷命令和参数。

注意

可以下载名为 PortQryUI 的单独工具,其中包括 PortQry 的图形 UI。 PortQryUI 具有多个功能,可更轻松地使用 PortQry。 若要获取 PortQryUI 工具,请参阅 PortQryUI - PortQry 命令行端口扫描程序的用户界面。

适用于: 支持的 Windows 版本

PortQry 测试和结果

典型的端口扫描工具报告,如果目标 UDP 端口未返回 Internet 控制消息协议(ICMP)“目标无法访问”消息,则端口具有 听状态。 由于以下一个或两个原因,此结果可能不准确:

  • 如果没有对定向数据报的响应,则目标端口可能已 筛选
  • 大多数服务不会响应发送给它们的未格式化用户数据报。 通常,侦听端口的服务或程序仅响应使用特定会话层或应用程序层协议的消息。

为了生成更准确且有用的结果,PortQry 使用双重测试过程。

步骤 1:端口状态测试

PortQry 将端口的状态报告为以下三个值之一:

  • 侦听:此响应指示进程正在侦听目标端口。 PortQry 从目标端口收到响应。
  • 未侦听:此响应指示没有进程正在侦听目标端口。 PortQry 从目标端口收到了以下 ICMP 消息之一:

    目标无法访问端口不可访问

  • FILTERED:此响应指示正在筛选目标端口。 PortQry 未收到来自目标端口的响应。 进程可能正在侦听目标端口,也可能不侦听。 默认情况下,PortQry 在返回 FILTERED 响应前三次查询 TCP 端口,并在返回 FILTERED 响应之前查询 UDP 端口一次。

步骤 2:专用测试

如果目标 UDP 端口没有响应,PortQry 将报告端口正在 侦听或筛选。 但是,排查连接问题时,了解端口是正在筛选还是正在侦听,这很有用。 这在包含一个或多个防火墙的环境中尤其如此。

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> 查询特定目标
  • 这是命令行模式的唯一必需参数。
  • 名称<>值表示要查询的计算机的名称或 IP 地址。 此值不能包含空格。
-p <protocol> 使用指定的协议
  • <协议>值表示要查询的端口类型(可能的值为tcpudpboth)。
  • 默认值为 tcp
-e <port_number> 指定目标端口(也称为“终结点”)
  • <port_number>值表示要在目标计算机上查询的端口。
  • 默认值为 80
-o <port_number>,<port_number> 在序列中指定多个目标端口 port_number,port_number>><值表示要在序列中查询的端口号的逗号分隔列表。< 不要在逗号周围使用空格。
-r <port_number>:<port_number> 指定目标端口的范围
  • <port_number><port_number> 值表示以冒号分隔的起始和结束端口号。 不要在冒号周围使用空格。
  • 起始端口号必须小于结束端口号。
-l <filename.txt> 生成日志文件
  • <filename.txt>值表示日志文件的名称和扩展名。 此值不能包含空格。
  • 命令运行时,PortQry 会在安装它的目录中创建日志文件。
  • 如果文件已存在,PortQry 会要求你确认是否要覆盖它(除非也使用 -y 参数)。
-y 覆盖以前的日志文件
  • -y -l结合使用时,PortQry 将覆盖现有日志文件,而无需提示你确认该操作。
  • 如果 PortQry 命令字符串不包含 -l,则 PortQry 将 -y忽略。
-sl 等待额外的时间进行响应(也称为慢链接延迟) 使用此参数将 PortQry 等待来自 UDP 端口的响应的时间加倍,然后 PortQry 确定端口未侦听或已筛选。 查询慢速或不可靠的网络链接时,正常等待时间可能太短,无法接收响应。
-nr 跳过反向名称查找
  • 默认情况下,当用于 -n 指定目标计算机的 IP 地址时,PortQry 会执行反向名称查找,以将 IP 地址解析为名称。 此过程可能非常耗时,尤其是在 PortQry 无法解析 IP 地址时。 用于 -nr 跳过查询的此步骤。
  • 如果使用 -n 指定计算机或域名,PortQry 将 -nr忽略 。
-sp <port_number> 从特定源端口进行查询
  • <port_number>值表示 PortQry 用于发送查询的端口。
  • PortQry 无法使用另一个进程已使用的端口。 如果指定的端口已在使用中,PortQry 将返回以下错误消息:
    无法使用指定的源端口。
    端口已在使用中。
    指定未使用并再次运行命令的端口。
  • 在以下情况下,PortQry 对查询的第一个测试使用指定的端口,但不要使用第二个测试:
    • RPC(TCP 和 UDP 端口 135)
    • LDAP (UDP 端口 389)
    • NetBIOS 适配器状态查询 (UDP 端口 137)
    在这些情况下,PortQry 使用临时端口进行第二次测试。 发生这种情况时,PortQry 在其输出中记录“使用临时源端口”。
  • 如果安装了 PortQry 的计算机也运行 IPSec 策略代理,UDP 端口 500 可能不能用作源端口。 若要暂时关闭 IPSec 策略代理,以便可以使用端口 500,请运行 net stop PolicyAgent。 完成测试后,请运行 net start PolicyAgent
-cn !<community_name>! 查询 SNMP 社区
  • <community_name>值表示要查询的 SNMP 社区的名称。 必须使用感叹号分隔此值,如左列中所示。
  • 如果 SNMP 服务未侦听目标端口,则 PortQry 将 -cn忽略。
  • 默认社区名称为 public.
-q 以静默模式运行 PortQry
  • 使用 -q时,PortQry 会取消除错误消息之外的所有屏幕输出。
  • 若要查看错误消息以外的输出, -q 请结合使用 -l。 PortQry 记录日志文件中的正常输出。
  • 如果日志文件已存在,并且你 -q 一起使用 -l,则 PortQry 将覆盖现有日志文件,而不会提示你。
  • 不能 -q-o-r-p both.
  • 使用批处理文件运行 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 将确定端口正在侦听。

    注意

    DNS 服务器是否返回正响应或负响应并不重要。 任何响应都指示端口正在侦听。

在本地(命令行)模式下使用 PortQry

可以在本地模式下使用 PortQry 获取有关 Tcp 端口和本地计算机上运行 PortQry 的 UDP 端口的详细信息,而不是查询远程目标计算机上的端口。 使用以下语法在本地模式下运行 PortQry:

portqry -local | -wpid <pid> | -wport <port_number> [-wt <seconds>] [-l <filename.txt>] [-v]

此语法中的占位符在下表中介绍了本地模式参数:

参数 说明 注释
-local 检索本地信息
  • 枚举本地计算机上当前处于活动状态的所有 TCP 和 UDP 端口映射。 此输出类似于命令生成的输出 netstat.exe -an
  • 在支持 PID 到端口映射的计算机上,输出包括在本地计算机上使用端口的进程 PID。 如果使用详细选项(-v),输出还包括 PID 所属的服务的名称,并列出进程加载的所有模块。 可以使用此信息来确定哪些端口与计算机上运行的特定程序或服务相关联。
-wport <port_number> 监视端口
  • 监视特定端口以获取更改。 <port_number>值表示要监视的端口。
  • 对于 TCP 端口,PortQry 报告以下状态之间的更改:
    • CLOSE_WAIT
    • 既定
    • FIN_WAIT_1
    • LAST_ACK
    • SYN_RECEIVED
    • SYN_SEND
    • TIMED_WAIT
  • 对于 UDP 端口,PortQry 报告程序是否绑定到端口,但不报告 UDP 端口是否接收数据报。
  • 若要停止监视,请按 Esc。
-wpid <pid> 监视进程 ID (PID)
  • 监视特定 PID,以查找连接的数量和状态的更改。 <process_number>值表示要监视的 PID。
  • 若要停止监视,请按 Esc。
-wt <seconds> 在特定时间间隔检查
  • 检查由 -wport /seconds 值表示的间隔或 "-wpid 按 /<seconds> 值标识的目标的状态。
  • 秒<>值必须介于 1,200 之间(含)。
  • 默认值为 60
  • 不能单独使用 -wt ,也不能一 -local起使用。
-l <filename.txt> 生成日志文件
  • <filename.txt>值表示日志文件的名称和扩展名。 此值不能包含空格。
  • 命令运行时,PortQry 会在安装它的目录中创建日志文件。
  • 如果文件已存在,PortQry 会要求你确认是否要覆盖它(除非也使用 -y 参数)。
-y 覆盖以前的日志文件
  • -y -l结合使用时,PortQry 将覆盖现有日志文件,而无需提示你确认该操作。
  • 如果 PortQry 命令字符串不包含 -l,则 PortQry 将 -y忽略。
-v 生成详细输出 PortQry 为屏幕输出(以及日志文件(如果使用)提供了其他详细信息。

本地模式下参数的备注

  • -local参数-wport-wpid参数互斥。 单个 PortQry 命令字符串中只能使用这些参数之一。
  • -q 参数在本地模式下不起作用。
  • 在某些情况下,PortQry 可能会报告系统空闲进程(PID 0)正在使用一些 TCP 端口。 如果本地程序连接到 TCP 端口,然后停止,则可能会出现此行为。 即使程序不再运行,程序与端口的 TCP 连接也可能处于“计时等待”状态几分钟。 在这种情况下,PortQry 可能会检测到端口正在使用,但它无法识别正在使用端口的程序,因为 PID 已发布。 默认情况下,端口保持“计时等待”状态,最长的段生存期为两倍。
  • 对于每个进程,PortQry 报告尽可能多的信息,因为它可以访问。 对某些信息的访问权限受到限制。 例如,禁止访问空闲和 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)
>

交互模式命令

可以在交互模式下使用以下命令:

命令 说明 注释
node <name>n <name> 将目标设置为查询
  • 名称<>值表示要查询的计算机的名称或 IP 地址。此值不能包含空格。
  • 默认值为 127.0.0.1 (本地计算机)。
queryq 发送查询
  • 使用当前设置查询当前目标。
  • 默认协议为 tcp.
  • 默认目标端口为 TCP 端口 80。
  • 默认源端口为端口 0(临时端口)。
  • 可以使用命令中的多个快捷方式 query 之一来运行任意一个常见查询。 有关可用快捷方式的列表,请参阅 交互式模式查询快捷方式
set <option>=<value> 设置查询选项的值
  • 在此命令中,<选项>表示要设置的选项的名称,值<>表示选项的新值。
  • 若要查看可用选项的当前值列表,请输入 set all
  • 有关可用选项的列表,请参阅 交互模式选项
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>

注意

在此命令中,<选项>表示要设置的选项的名称,值<>表示选项的新值。

选项 说明 注释
set all 显示选项的当前值
set port=<port_number>
set e=<port_number>
指定目标端口 <port_number>值表示要在目标计算机上查询的端口。
set sport=<port_number>
set sp=<port_number>
指定源端口
  • <port_number>值表示 PortQry 用于发送查询的端口。
  • PortQry 无法使用另一个进程已使用的端口。
  • 如果指定端口号为零,则 PortQry 使用临时端口。
set protocol=<protocol>
set p=<protocol>
指定要使用的协议 协议<>值表示要查询的端口类型(tcp或)。 udpboth
set cn=<community_name> 指定 SNMP 社区
  • <community_name>值表示要查询的 SNMP 社区的名称。
  • 如果 SNMP 服务未侦听目标端口,则 PortQry 将 -cn忽略。
  • 默认社区名称为 public.
set nr 关闭或打开反向名称查找
  • 默认情况下,如果已将 IP 地址设置为查询目标,则 PortQry 会将 IP 地址解析为名称。 如果更改此选项,PortQry 将跳过名称解析步骤。
  • 若要再次打开反向名称查找,请再次运行 set nr
set sl 打开或关闭慢速链接延迟
  • 如果更改此选项,PortQry 将等待来自 UDP 端口的响应的时间长度加倍,然后 PortQry 确定端口未侦听或已筛选。 查询慢速或不可靠的网络链接时,正常等待时间可能太短,无法接收响应。
  • 若要再次关闭慢链接延迟,请再次运行 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

======================================================

使用特定间隔监视进程 ID

以下命令监视特定进程:

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 报告端口正在 侦听或筛选
  • 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 终结点映射器以获取终结点信息。 此参数可加速扫描一系列端口。