UDP端口能被嗅探吗

听到同事在聊,怎么探测对端的某个UDP端口?有的说用nc命令。我也插了一句这个测不准的。当然通过网上查找也是千篇一律的讲着nc命令介绍(对此,我很纳闷。nc --help介绍的不够详细吗,需要再写一遍放网上吗,是谁不会打几个字还是怎么的?)。

为什么我会第一反应是测不准的呢?我们都知道探测TCP端口我们都是用的telnet。TCP基于三次握手,握手成功那就判定端口通,相反则不通。那UDP呢?他没有三次握手,那又是基于什么来判断通和不通的呢?接下来往下看,一起来测试下。

实验测试

telnet测试

正常情况

复制代码
[root@client ~]# telnet 192.168.200.81 9100
Trying 192.168.200.81...
Connected to 192.168.200.81.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
[root@client ~]#

image-20240731204452243

禁用SYN回包

复制代码
[root@server ~]# iptables -A OUTPUT -d 192.168.200.79/32 -p tcp -m tcp --tcp-flags ALL SYN,ACK -j DROP

[root@client ~]# telnet 192.168.200.81 9100
Trying 192.168.200.81...
telnet: connect to address 192.168.200.81: Connection timed out
[root@client ~]# 

image-20240731210901755

丢弃SYN回包后,客户端的确无法建立连接。而且细心的可以发现,客户端SYN超时重传的时间间隔为1+2+4+8+16+32=63 秒。客户端的 SYN 报文最大重传次数由 tcp_syn_retries内核参数控制,这个参数是可以自定义的,默认值一般是 5。每次超时的时间是上一次的 2 倍。 参考的大佬小林coding的博客。个人觉得他总结的很好,简单易懂。

nc测试

正常情况

复制代码
[root@server ~]# nc -lu 10000  #server开启UDP端口,只能使用一次。第二次连接会失败,需要重新执行该命令

[root@client ~]# nc -zvu 192.168.200.81 10000   #检测已开启的端口
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.200.81:10000.
Ncat: UDP packet sent successfully      #显示发送成功
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.
[root@client ~]# nc -zvu 192.168.200.81 10001  #检测未开启的端口
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.200.81:10001.
Ncat: Connection refused.    #显示连接拒绝

image-20240801200231897 image-20240801200543851

UDP 1000端口正常连接,抓包只有一个数据包,UDP 1001端口连接拒绝。抓包有两个数据包,其中一个是ICMP回显包,TYPE3、CODE3。其他类型参考百度百科。 nc启动的udp端口

禁用ICMP回显

复制代码
[root@server ~]# iptables -A OUTPUT -d 192.168.200.79/32 -p icmp -j DROP    #禁止ICMP回显

[root@client ~]# nc -zvu 192.168.200.81 10000
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.200.81:10000.
Ncat: UDP packet sent successfully      #显示发送成功
Ncat: 1 bytes sent, 0 bytes received in 2.02 seconds.
[root@client ~]# nc -zvu 192.168.200.81 10001
Ncat: Version 7.50 ( https://nmap.org/ncat )
Ncat: Connected to 192.168.200.81:10001.
Ncat: UDP packet sent successfully      #显示发送成功,可我并没有开启该端口
Ncat: 1 bytes sent, 0 bytes received in 2.01 seconds.
[root@client ~]# 

image-20240801201629958

抓的包中看到两个端口都没有ICMP回显。且都是成功,而在服务端并没开启10001端口。

总结

在用Telnet测试TCP端口时,它是基于三次握手来嗅探端口。而 在用nc测试UDP端口时,它是基于ICMP回显来嗅探端口。所以当我们使用nc测试UDP端口时候,提示Connection refused 那是一定的,可信的。提示packet sent successfully 那就不一定是真实的,也许存在该端口,也许不存在该端口。

本文由mdnice多平台发布

相关推荐
编码者卢布2 小时前
【Azure Storage Account】Azure Table Storage 跨区批量迁移方案
后端·python·flask
她说..4 小时前
策略模式+工厂模式实现审批流(面试问答版)
java·后端·spring·面试·springboot·策略模式·javaee
梦梦代码精5 小时前
开源、免费、可商用:BuildingAI一站式体验报告
开发语言·前端·数据结构·人工智能·后端·开源·知识图谱
李慕婉学姐6 小时前
【开题答辩过程】以《基于Spring Boot的疗养院理疗管理系统的设计与实现》为例,不知道这个选题怎么做的,不知道这个选题怎么开题答辩的可以进来看看
java·spring boot·后端
tb_first6 小时前
SSM速通2
java·javascript·后端
一路向北⁢6 小时前
Spring Boot 3 整合 SSE (Server-Sent Events) 企业级最佳实践(一)
java·spring boot·后端·sse·通信
风象南6 小时前
JFR:Spring Boot 应用的性能诊断利器
java·spring boot·后端
爱吃山竹的大肚肚6 小时前
微服务间通过Feign传输文件,处理MultipartFile类型
java·spring boot·后端·spring cloud·微服务
毕设源码-邱学长8 小时前
【开题答辩全过程】以 基于Springboot的酒店住宿信息管理系统的设计与实现为例,包含答辩的问题和答案
java·spring boot·后端
咖啡啡不加糖9 小时前
Grafana 监控服务指标使用指南:打造可视化监控体系
java·后端·grafana