代码改变世界

Windows如何检测UDP端口的连通性

2024-02-28 11:16  潇湘隐者  阅读(6686)  评论(0编辑  收藏  举报

在Windows平台上如何检测UDP端口的连通性呢?其实,平时我们遇到检测TCP端口的连通性的情况比较多,遇到检测UDP端口连通性的情况较少。而且检测UDP端口的连通性比较复杂一点。像检测TCP端口是否连通(放开),Windows平台,一般常用的工具有telnet、psping等工具,而检测UDP端口的工具,在Linux平台,有nc(netcat),ncat,nmap等工具,在Windows平台,有哪一些工具可以用来检测UDP端口的连通性呢?下面简单介绍一下,仅供学习参考。

PortQry工具

PortQry 是一种命令行工具,可用于帮助排查 TCP/IP 连接问题。 此工具在本地计算机或远程计算机上报告目标 TCP 和用户数据报协议 (UDP) 端口的状态。 它还提供有关本地计算机的端口使用情况的详细信息。它有三种模式,分别为命令行模式,本地模式,交互模式。另外,你也可以下载PortQryUI这个工具,它包含PortQry的图形UI工具。

下载地址请见下面链接地址[1]

命令例子:

portqry.exe -n 192.168.63.217 -p udp  -e 1434

参数说明

-n  特定查询目标主机
-p  使用指定的协议, 默认值为tcp
-e  端口号

注意,命令窗口下执行命令,必须切换到PortQryUI的解压目录,执行命令,检测UDP端口的连通性

  1. 如果端口1434没有正在监听(SQL Server Browser服务关闭情况下)并且防火墙没有屏蔽端口的情况下,此时提示NOT LISTENING
C:\PortQryUI>portqry.exe -n 192.168.63.217 -p UDP  -e 1434

Querying target system called:

 192.168.63.217

Attempting to resolve IP address to a name...


IP address resolved to vDashDB3UAT

querying...

UDP port 1434 (ms-sql-m service): NOT LISTENING
  1. 如果端口1434正在监听(SQL Server Browser服务启动情况下)并且防火墙没有屏蔽端口的情况下,此时提示如下所示:
C:\PortQryUI>portqry.exe -n 192.168.63.217 -p UDP  -e 1434

Querying target system called:

 192.168.63.217

Attempting to resolve IP address to a name...


IP address resolved to *****

querying...

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED

Sending SQL Server query to UDP port 1434...

Server's response:

ServerName   ******
InstanceName MSSQLSERVER
IsClustered No
Version 15.0.2000.5
tcp 14033



==== End of SQL Server query response ====

UDP port 1434 is LISTENING

C:\PortQryUI>
  1. 如果防火墙屏蔽了UDP 1434端口,不管SQL Server Browser服务是启动也好,关闭也好,此时检测状态为FILTERED。
C:\PortQryUI>portqry.exe -n 192.168.63.217 -p udp  -e 1434

Querying target system called:

 192.168.63.217

Attempting to resolve IP address to a name...

Failed to resolve IP address to name

querying...

UDP port 1434 (ms-sql-m service): LISTENING or FILTERED

Sending SQL Server query to UDP port 1434...

UDP port 1434 (ms-sql-m service): FILTERED

C:\PortQryUI>
  1. 如果防火墙开启的情况下,服务器根本没有相关服务侦听UDP 1436端口的话,此时输出信息如下所示:
C:\PortQryUI>portqry.exe -n 192.168.63.217 -p UDP  -e 1436

Querying target system called:

 192.168.63.217

Attempting to resolve IP address to a name...

Failed to resolve IP address to name

querying...

UDP port 1436 (unknown service): LISTENING or FILTERED

C:\PortQryUI>

此时结果为UDP port 1436 (unknown service): LISTENING or FILTERED。这个结果是不准确的。官方的解释如下:

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

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

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

ncat命令

直接安装nmap的Windows版本,里面包含了ncat命令。

1:如果端口1434没有正在监听(SQL Server Browser服务关闭情况下)并且防火墙没有屏蔽端口的情况下,此时提示“Ncat: 远程主机强迫关闭了一个现有的连接。“

C:\Program Files (x86)\Nmap>ncat -zu 192.168.63.217 1434 -v
Ncat: Version 7.94 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.63.217:1434.
Ncat: 远程主机强迫关闭了一个现有的连接。 .

2:如果端口1434正在监听(SQL Server Browser服务启动的情况下)并且防火墙没有屏蔽端口的情况下,此时提示如下:

C:\Program Files (x86)\Nmap>ncat -zu 192.168.63.217 1434 -v
Ncat: Version 7.94 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.63.217:1434.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.40 seconds.

3:如果防火墙屏蔽了UDP 1434端口,此时输出结果跟2一样。这个跟UDP的特性有关。 对于使用者来说,就无法判别端口是被防火墙屏蔽还是开通。关于更多详情,下面nmap工具一起细说。这里暂且略过。

C:\Program Files (x86)\Nmap>ncat -zu 192.168.63.217 1434 -v
Ncat: Version 7.94 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.63.217:1434.
Ncat: UDP packet sent successfully
Ncat: 1 bytes sent, 0 bytes received in 2.37 seconds.

C:\Program Files (x86)\Nmap>

nmap工具

大名鼎鼎的nmap工具,这个就无须额外介绍了,下面我们通过例子来验证一下。

1:端口连通正常的情况:端口1434正在监听(SQL Server Browser服务启动情况下)并且防火墙没有屏蔽端口的情况下

C:\Users\Administrator>nmap -sU 192.168.63.217 -p 1434 -Pn
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-01 11:32 ?D1ú±ê×?ê±??
Nmap scan report for 192.168.63.217
Host is up (0.010s latency).

PORT     STATE         SERVICE
1434/udp open|filtered ms-sql-m
MAC Address: 00:50:56:97:68:65 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 13.74 seconds

关于STATE字段的解释如下:

STATE为open是正常打开的状态
STATE为filtered是被阻断或者没有打开的状态

参数说明:

-sU 表示扫描UPD端口
-p  表示指定端口号,例如 -p 1434 表示指定扫描端口号1434
-Pn  表示绕过ping进行扫描,如果有些服务器是放在防火墙下面的禁止PING的,就有可能会被跳过。所以用-Pn来强制性地扫描
  1. UDP端口1434没有正在监听状态(SQL Server Browser服务关闭的情况下)并且防火墙没有屏蔽端口的话
C:\Users\Administrator>nmap -sU 192.168.63.217 -p 1434 -Pn
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-01 11:33 ?D1ú±ê×?ê±??
Nmap scan report for 192.168.63.217
Host is up (0.0074s latency).

PORT     STATE  SERVICE
1434/udp closed ms-sql-m
MAC Address: 00:50:56:97:68:65 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 13.44 seconds

C:\Users\Administrator>
  1. UDP端口被防火墙屏蔽的情况,依然显示1434端口是open|filtered状态,如下所示
C:\Users\Administrator>nmap -sU 192.168.63.217 -p 1434 -Pn
Starting Nmap 7.94 ( https://nmap.org ) at 2024-02-01 11:39 ?D1ú±ê×?ê±??
Nmap scan report for 192.168.63.217
Host is up (0.0020s latency).

PORT     STATE         SERVICE
1434/udp open|filtered ms-sql-m
MAC Address: 00:50:56:97:68:65 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 13.72 seconds

C:\Users\Administrator>

这个跟情况1是一样的。也就是说在防火墙屏蔽端口的情况下,我们没法判断UDP端口 1434的连通性,跟上面ncat命令的情况一致,那么这是为什么呢? 下面是我看到的一个解释[2]

因为UDP扫描或侦测时,发送空的(没有数据)UDP报头到每个目标端口。 如果返回ICMP端口不可到达错误(类型3,代码3), 该端口是closed(关闭的)。 其它ICMP不可到达错误(类型3, 代码1,2,9,10,或者13)表明该端口是filtered(被过滤的)。 偶尔地,某服务会响应一个UDP报文,证明该端口是open(开放的)。 如果几次重试后还没有响应,该端口就被认为是 open|filtered(开放|被过滤的)。 这意味着该端口可能是开放的,也可能包过滤器正在封锁通信。

nc命令

nc命令检测如下所示:

1:端口连通正常的情况:端口1434正在监听(SQL Server Browser服务启动情况下)并且防火墙没有屏蔽端口的情况下

D:\netcat-win32-1.11\netcat-1.11>nc -vuz 192.168.63.217 1434
vDashDB3UAT [192.168.63.217] 1434 (ms-sql-m) open

2:UDP端口被防火墙屏蔽的情况,如下所示

D:\netcat-win32-1.11\netcat-1.11>nc -vuz 192.168.63.217 1434
192.168.63.217: inverse host lookup failed: h_errno 11004: NO_DATA
(UNKNOWN) [192.168.63.217] 1434 (ms-sql-m) open

其实可以通过在客户端和服务器上同时部署nc命令,然后来验证UDP端口的连通性。网上有很多这方面的介绍。这里就此略过。

参考资料

[1]

1: https://download.microsoft.com/download/3/f/4/3f4c6a54-65f0-4164-bdec-a3411ba24d3a/portqryui.exe

[2]

1: https://nmap.org/download.html#windows