如何判断开放端口是TCP协议还是UDP协议
端口扫描区分TCP/UDP协议的实现方案
你当前采用的「尝试与端口建立连接判断是否开放」的逻辑,本身就是TCP端口专属的检测手段:TCP是面向连接的协议,只有开放的TCP端口才会响应三次握手请求完成连接建立,UDP是无连接协议,不会响应TCP握手报文,所以你现在扫出来的所有开放端口,天然属于TCP协议,无需额外判定。
如果需要识别开放的UDP端口,你需要单独实现UDP检测逻辑,具体逻辑如下:
- 构造UDP报文发往目标端口,根据系统返回的报文判断端口状态:
- 若收到目标返回的
ICMP 端口不可达报文,直接判定UDP端口关闭 - 若发送UDP报文后无任何响应,存在两种可能:端口开放、或报文/响应包被防火墙拦截。这种情况下可以针对常见UDP服务(DNS、SNMP、NTP、TFTP等)构造对应协议的专用请求payload重新发送,只要收到符合对应协议规范的响应,即可判定该UDP端口开放。
- 若收到目标返回的
- 实现注意事项:
- UDP扫描的误判率远高于TCP扫描,因为大量网络环境会封禁ICMP响应报文或者直接丢弃未知UDP包,建议优先匹配常见UDP服务的协议payload提升准确率
- 注意控制扫描速率,避免触发目标网络的流量拦截规则
内容的提问来源于stack exchange,提问作者Imran Khan
相关产品推荐
相关产品推荐

