使用PortQry检查TCP/UDP打开端口(端口扫描程序)
Windows提供了许多用于诊断TCP/IP网络中问题的工具(
ping
,
telnet
,
pathping
, 等等。)。但是,并非所有人都可以方便地检查状态或者扫描远程服务器上已打开的网络端口。 " Portqry.exe"实用程序是一种方便的工具,可用于检查远程主机上的TCP/UDP端口的响应,以诊断与TCP/IP网络中的各种网络服务和防火墙的操作有关的问题。大多数情况下,Portqry实用程序被用作功能更强大的替代品
telnet
命令,并且与telnet不同,它还允许我们检查打开的UDP端口。
使用PortQry扫描打开的UDP/TCP端口
Windows Server 2003的PortQry的第一个版本在较新的OS版本(Windows Server 2008和更高版本)中无法正常工作,因此实用程序的第二个版本" PortQryV2"已发布。它是我们今天应该使用的版本(我们可以在此处下载PortQryV2)。
在Windows 10上,我们可以使用Chokolatey软件包管理器通过以下命令安装PortQry:
choco install portqry
下载并解压缩PortQryV2.exe存档。运行命令提示符,然后转到包含实用程序的目录,例如:
cd c:\tools\PortQryV2
例如,要从客户端检查DNS服务器的可用性,我们需要检查是否在其上打开了53个TCP和UDP端口。 port check命令的语法如下:
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 cmdlet不同,PortQry实用程序同时支持TCP和UDP协议。
在我们的示例中,命令如下所示:
PortQry.exe –n 10.0.25.6 -p both -e 53
Portqry将返回以下三个可用端口状态之一:
- "侦听"表示端口已打开(接受连接),并且已收到端口的响应;
- "不""正在侦听"表明目标系统上没有任何进程(服务)接受指定端口上的连接。当检查带有复位标志的UDP端口或者TCP数据包时,PortQry收到ICMP响应"目标不可达端口不可达"。
- "已过滤"表示PortQry尚未从指定端口接收到任何响应,或者响应已被过滤。即,此端口未在目标系统上监听,或者受防火墙或者某些系统设置的限制。默认情况下,TCP端口被轮询3次,而UDP是一个。
在我们的示例中,可以通过TCP和UDP端口从客户端使用DNS服务器。
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
下一条命令扫描众所周知的TCP/IP端口号的范围,并返回接受连接的端口列表(用作TCP Port Scanner):
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交互模式提示符下,我们可以指定远程计算机的名称和端口号:
node srv-lic set port = 80
要检查指定服务器上的端口,请按q
,然后按Enter。
使用-wport和-wpid参数,我们可以监视指定端口(wport)或者与本地主机上与指定进程(wpid)相关联的所有端口的状态。
例如,以下命令将在10分钟内监视指定本地端口的响应(例如RDP端口3389),如果其状态发生更改,它将通知管理员(详细日志将在LogFile中提供) 。文本)。要停止端口监视,请按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的版本以及在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.theitroad.local -p tcp -e 25
PortQuery GUI版本
最初,PortQry仅是控制台(CLI)工具。为了使不喜欢使用命令提示符的用户更加方便,Microsoft为portqryPortQueryUI
开发了简单的图形界面。我们可以从Microsoft官方下载网站PortQueryUI 下载PortQueryUI。
实际上,PortQueryUI是portqry的图形加载项,用于生成命令并在图形窗口中返回结果。
另外,PortQueryUI包含一些预定义的查询集,以检查流行的Microsoft服务的可用性:
- 域和信任(在Active Directory域控制器上检查ADDS服务)
- 交换服务器
- SQL服务器
- 联网
- IP秒
- 网络服务器
- 网络会议
我认为PortQueryUI不需要任何特殊注释。如果我们看下面的屏幕截图,应该很清楚。输入远程服务器的" DNS名称"或者" IP地址",选择一种预定义的服务("查询预定义的服务"),或者指定用于手动端口检查的端口号("手动输入查询端口"),然后单击查询按钮。
PortQueryUI中可能的返回码(在屏幕截图中突出显示):
- 0(0x00000000)连接已成功建立并且端口可用;
1
(0x00000001)指定的端口不可用或者已过滤;- " 2"(0x00000002,当检查UDP连接的可用性时,是正常的返回码,因为未返回ACK响应。