我在这里有一个两难选择。我有一个设备可以与另一个远程设备通信,但它们之间有防火墙。这是一个 UDP 连接,因此 TCP 实用程序无法测试特定端口是否打开。我知道我们可以从防火墙获得它,但我没有访问权限,所以我必须证明端口没有打开。
源系统是 Windows 7 系统,目标系统是运行 Linux 的设备。
我在这里有一个两难选择。我有一个设备可以与另一个远程设备通信,但它们之间有防火墙。这是一个 UDP 连接,因此 TCP 实用程序无法测试特定端口是否打开。我知道我们可以从防火墙获得它,但我没有访问权限,所以我必须证明端口没有打开。
源系统是 Windows 7 系统,目标系统是运行 Linux 的设备。
这是一个快速食谱:
1) 启动数据包嗅探器:
sudo tcpdump -n -i eth2 icmp &
[1] 1409
$ tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth2, link-type EN10MB (Ethernet), capture size 262144 bytes
2)发送UDP数据包:
$ echo reply-me | nc -u 1.0.0.2 1000
3) 如果您收到“ICMP 端口无法访问”,则该 UDP 端口已关闭:
20:54:15.475211 IP 1.0.0.2 > 1.0.0.1: ICMP 1.0.0.2 udp port 1000 unreachable, length 45
4) 否则,通常要么是端口是开放的,要么是某些东西阻塞了 ICMP。
UDP 显然是一种发送即忘的协议。例如,在 NMap UDP 扫描期间,明确证明 UDP 端口已打开的唯一方法是您是否收到来自该端口的响应。请记住,许多服务可能不会回复任意数据,并且需要协议或特定于应用程序的请求才能保证响应。但是,某些 ICMP 代码可以保证端口已关闭。RFC 792和RFC 1122为我们提供了一些关于端口关闭时会发生什么的很好的信息。
例如,ICMP 类型 3 代码 3“目标端口不可达”,就所有意图和目的而言,几乎可以保证是一个封闭端口。
完整的代码列表可以在这里找到:
http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
"nc -uvz ip port"
不准确,您可能应该使用"nmap -sU -p port ip"
,如果结果显示“打开”,则 udp 端口可能已打开,如果显示“打开 | 已过滤”,则可能已关闭或已过滤。