我在这里有一个难题。我有一台与另一台远程设备通信的设备,但它们之间有防火墙。这是UDP连接,因此TCP实用程序无法测试特定端口是否打开。我知道我们可以从防火墙获得该信息,但是我没有访问权限,因此我必须证明端口未打开。
源系统是Windows 7系统,而目标系统是Windows 7系统。运行Linux的设备。
#1 楼
UDP显然是一种“发送后遗忘”协议。例如,在NMap UDP扫描期间,唯一证明UDP端口已打开的唯一方法是从该端口收到响应。请记住,许多服务可能不会回复任意数据,而是需要协议或特定于应用程序的请求才能保证响应。但是,某些ICMP代码可以保证端口是关闭的。 RFC 792和RFC 1122为我们提供了一些有关关闭端口时的预期信息。例如,出于所有意图和目的,ICMP 3类代码3“ Destination Port Unreachable” ,几乎可以保证是封闭端口。完整的代码列表可以在这里找到:
http://www.iana.org/assignments/icmp-parameters /icmp-parameters.xhtml
评论
感谢你的回答。我将调查有关ICMP 3类请求的更多信息。
– JoeliNNaBit
16年2月11日在17:26
#2 楼
这是一个快速配方: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。
评论
由于源系统是Windows 7,因此Linux命令将不起作用。
–罗恩·莫潘♦
16年2月5日在21:20
是的,的确如此,但是我将尝试使用虚拟机并检查其是否有效。
– JoeliNNaBit
16年2月11日在17:16
#3 楼
"nc -uvz ip port"
不太准确,您可能应该使用"nmap -sU -p port ip"
,如果结果显示为“ open”,则udp端口可能为打开状态;如果结果显示为“ open | filtered”,则可能为关闭或过滤状态。
评论
如果没有访问防火墙,您真的无法分辨(当然,除非您的系统正在运行)。涉及您无法控制的网络的问题在此处明确不在主题之列。
我投票将其保持打开状态。我认为这属于灰色区域,这是一个有用的理论/故障排除问题。
...您可以控制防火墙和网络吗?如果不是,那么这不在这里。
这是在现在的实验室环境中,我们正在尝试模拟未来的生产情况。我想找到一种方法来解决UDP会话故障,而不必解析服务器端的日志。但是,谢谢,我相信,根据交流类型的性质,这是不可能的。