使用 PortQry 命令行工具

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

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

可以通过以下几种模式之一从命令提示符使用 PortQry:

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

注意

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

适用于: 支持的 Windows 版本

PortQry 测试和结果

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

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

为了生成更准确和有用的结果,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 查询)
    • ) netBIOS 查询 (MAC 地址
    • (ISA Server 查询) Mspclnt.ini 文件信息
  • PortQry 将分析、格式化,然后返回来自服务或程序的响应,作为其测试报告的一部分。

用于对本地计算机进行故障排除的其他测试

如果必须对安装了 PortQry 的计算机上的端口进行故障排除,请在本地模式下使用 PortQry。 在命令行中使用本地模式参数时,可以在本地计算机上执行如下任务:

  • 枚举端口映射
  • 监视特定端口的更改
  • 监视特定流程的更改

有关详细信息,请参阅 在本地 (命令行) 模式下使用 PortQry

在命令行模式下使用 PortQry

可以在命令提示符处以与任何其他命令行工具相同的方式运行 PortQry。 本文中的大多数示例都演示了命令行 PortQry 命令。 在命令行模式下,可以将多个选项添加到命令字符串,以指定要运行哪些查询以及如何运行它。 若要在命令行模式下运行 PortQry,请运行使用以下语法的命令:

portqry.exe -n <name_to_query> [options]

注意

在此命令中, <name_to_query> 是要查询的 IP 地址、计算机名称或域。 此参数是必需的。 [options] 是可选参数。

命令行模式的 PortQry 参数

以下参数在常规命令行模式下可用:

参数 说明 Comments
-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 覆盖以前的日志文件
  • -l结合使用-y时,PortQry 会覆盖现有日志文件,而不会提示你确认操作。
  • 如果 PortQry 命令字符串不包括 -l,PortQry 将 -y忽略 。
-sl 等待额外的时间等待响应 (也称为慢链接延迟) 在 PortQry 确定端口未侦听或已筛选之前,使用此参数将 PortQry 等待来自 UDP 端口的响应的时间加倍。 查询慢速或不可靠的网络链接时,正常的等待时间可能太短,无法接收响应。
-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 会禁止显示除错误消息之外的所有屏幕输出。
  • 若要查看错误消息以外的输出,请与 -l-q起使用。 PortQry 记录日志文件中的正常输出。
  • 如果日志文件已存在,并且你与 -l-q起使用,则 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 终结点映射器的所有终结点。

    重要

    使用 时, -rPortQry 不会查询 RPC 终结点映射程序。

  • 查询端口 53 (DNS) 时,PortQry 使用 TCP 和 UDP 发送 DNS portqry.microsoft.com 查询。 如果服务器返回响应,则 PortQry 确定端口正在侦听。

    注意

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

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

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

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

此语法中的占位符在以下本地模式参数表中进行了说明:

参数 说明 Comments
-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> 在特定间隔进行检查
  • 按 /<seconds> 值表示的间隔检查由 或 "-wpid 标识-wport的目标的状态。
  • ><值必须介于 1 到 1,200 ((含) )。
  • 默认值为 60
  • 不能单独使用 -wt 或与 -local一起使用。
-l <filename.txt> 生成日志文件
  • <filename.txt> 值表示日志文件的名称和扩展名。 此值不能包含空格。
  • 当命令运行时,PortQry 会在安装它的目录中创建日志文件。
  • 如果文件已存在,PortQry 会要求确认是否要覆盖它 (除非你也使用 -y 参数) 。
-y 覆盖以前的日志文件
  • -l结合使用-y时,PortQry 会覆盖现有日志文件,而不会提示你确认操作。
  • 如果 PortQry 命令字符串不包括 -l,PortQry 将 -y忽略 。
-v 生成详细输出 PortQry 为屏幕输出 (和日志文件提供其他详细信息(如果) 使用)。

本地模式下参数的备注

  • -local-wport-wpid 参数是互斥的。 只能在单个 PortQry 命令字符串中使用其中一个参数。
  • 参数 -q 在本地模式下不起作用。
  • 在某些情况下,PortQry 可能会报告系统空闲进程 (PID 0) 正在使用某些 TCP 端口。 如果本地程序连接到 TCP 端口,然后停止,则可能会出现此行为。 即使程序不再运行,程序与端口的 TCP 连接也可能保持“计时等待”状态几分钟。 在这种情况下,PortQry 可能会检测到端口正在使用,但无法识别正在使用端口的程序,因为 PID 已释放。 默认情况下,端口保持“计时等待”状态,时长为最长段生存期的两倍。
  • 对于每个进程,PortQry 报告尽可能多的信息,因为它可以访问。 对某些信息的访问受到限制。 例如,禁止访问空闲和 CSRSS 进程的模块信息,因为它们的访问限制阻止用户级代码打开它们。 为了获得最佳结果,请在本地管理员或具有类似凭据的帐户的上下文中运行本地模式命令。
  • 将 或 -wpid-l结合使用-wport时,请使用 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> 将目标设置为查询
  • 名称><值表示要查询的计算机的名称或 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>

注意

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

选项 说明 Comments
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>
指定要使用的协议 协议><值表示查询 (、 udpboth) tcp的端口类型。
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 将格式化消息发送到备用端口。 例如,以下条目显示在典型的服务文件中:

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,即默认端口。

以下命令查询计算机上的默认 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

以下命令查询 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

以下命令查询从端口 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

指定源端口

以下命令使用 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 文件夹中的 Services 文件将 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 终结点映射程序以获取终结点信息。 此参数可加速扫描一系列端口。