怎么测试一个端口通不通?telnet、nc、nmap 各怎么用?
简化版
测端口连通性最常用三个工具:telnet 目标 端口(最通用,能连上就说明端口通、TCP 能建连)、nc -vz 目标 端口(netcat,更现代,支持批量/UDP)、nmap 目标 -p 端口(扫描多个端口、看状态)。关键点:ping 通不代表端口通——ping 只测网络层「主机可达」,端口测的是传输层「服务在不在监听」,两者是两回事。测试结果分三种:连上=端口开着、refused=主机在但端口没服务、超时卡住=防火墙丢包。
详细版
为什么不能用 ping 测端口:ping 走 ICMP(网络层),只能告诉你「这台主机在不在、网络通不通」,测不了某个端口上的服务是否可用。一台主机 ping 得通,但 80 端口的 web 服务可能根本没起。所以测「服务通不通」必须测端口(TCP 建连)。
① telnet——最通用
telnet example.com 443
- 能连上(黑屏光标/显示 Connected)→ 端口开着、TCP 三次握手成功。
- Connection refused → 主机可达,但该端口没有程序监听。
- 一直卡住直到 timeout → 大概率防火墙丢包。
- 退出:
Ctrl+]再输quit。缺点:默认没装、不支持 UDP。
② nc(netcat)——更现代、更强
nc -vz example.com 443 # -v 详细 -z 只探测不发数据
nc -vz example.com 20-25 # 扫一段端口范围
nc -vzu example.com 53 # -u 测 UDP 端口
比 telnet 强在:支持端口范围、支持 UDP、还能收发数据做调试。是运维测端口的首选。
③ nmap——端口扫描器
nmap -p 443 example.com # 测单个端口
nmap -p 1-1000 example.com # 扫一段端口
nmap example.com # 扫常见端口
nmap 会给出端口状态:open(开放)、closed(关闭,主机回了 RST)、filtered(被防火墙过滤,没回应)。适合批量扫描 + 判断防火墙。
④ Windows PowerShell 自带
Test-NetConnection example.com -Port 443
完整版教学
一、先破除最大误区:ping 通 ≠ 端口通
这是端口测试第一要理解的事。很多人「网站打不开,ping 一下服务器发现通的」,就以为服务器没问题——大错。原因在于 ping 和端口测试工作在不同的网络层次:
- ping 用 ICMP,工作在网络层,只验证「这台主机在线、网络能到达」。
- 端口测试要建立 TCP 连接,工作在传输层,验证「目标端口上有没有服务在监听、能不能握手」。
一台服务器可以「主机活着(ping 通)」但「web 服务挂了(80 端口连不上)」。所以判断某个服务可不可用,必须测它的端口,而不是 ping 主机。反过来,有些服务器禁 ping(禁 ICMP),ping 不通但端口服务好好的。ping 和端口测试是互补的两件事,不能相互代替。
二、telnet:最经典的端口测试工具
telnet 本来是远程登录协议(已被 SSH 取代),但它「建立一条到指定端口的 TCP 连接」的能力,让它成了最通用的端口测试工具:
telnet example.com 80
它做的事就是向目标端口发起 TCP 三次握手,结果分三种,每种指向不同原因:
- 握手成功:屏幕清空、光标闪烁或提示
Connected。说明端口开着、TCP 通。这时甚至可以手敲 HTTP 请求测试:输入GET / HTTP/1.0回车两次,能收到响应。 Connection refused(连接被拒绝):主机明确回了一个 RST——意思是「我在,但这个端口没有程序监听」。指向服务没启动 / 端口配错。- 长时间无响应最后 timeout:没有任何回应(包被丢弃),指向防火墙/安全组拦截,或主机不可达。
telnet 的短板:现在系统默认不装了,且只支持 TCP、不支持 UDP,不能扫端口范围。
小技巧:telnet 连上后想退出,按
Ctrl+]进入命令模式,再输quit。
三、nc(netcat):网络界的瑞士军刀
nc(netcat)功能比 telnet 强得多,是运维测端口的首选。测连通性的标准姿势:
nc -vz example.com 443
# -v 输出详细信息(成功/失败原因)
# -z zero-I/O 模式,只做连接探测、不发送数据
相比 telnet,nc 的优势:
- 扫端口范围:
nc -vz example.com 20-25一次测多个端口。 - 支持 UDP:
nc -vzu example.com 53测 UDP 端口(DNS、DHCP 等)。注意 UDP 无连接,探测结果不如 TCP 确定。 - 能收发数据:不加
-z时可以真正发数据,用来调试协议、传文件、甚至搭个临时服务端(nc -l 8080监听端口)。
所以 nc 不只是「测端口」,还是抓协议、临时通信的多面手,值得掌握。
四、nmap:批量扫描与看防火墙
要一次测很多端口、或判断防火墙行为,用 nmap(端口扫描器):
nmap -p 80,443,3306 example.com # 测指定几个端口
nmap -p 1-65535 example.com # 全端口扫描(慢)
nmap 的价值是它把端口状态分得更细:
open:端口开放,有服务监听。closed:端口关闭——主机回了 RST(对应 telnet 的 refused),主机可达但没服务。filtered:被防火墙过滤——探测包被丢弃,没有任何回应(对应 telnet 的 timeout)。
closed 和 filtered 的区分特别有用:closed 说明主机在、只是没起服务;filtered 说明防火墙把包拦了。这直接告诉你该去查服务还是查防火墙。
注意:nmap 是渗透/安全工具,扫描别人的服务器可能违法/违规,只能扫自己有权限的目标。
五、把三种结果对应到三类原因(最重要)
无论用哪个工具,测端口的结果都归为三类,务必记牢它们指向的原因:
| 结果 | 现象 | 原因 | 下一步 |
|---|---|---|---|
| 成功 | 连上/open | 端口开着、服务在监听 | 问题在应用层,用 curl 查 |
| 拒绝 refused | 立刻被拒/closed | 主机在,但端口没服务(RST) | 查服务是否启动、端口配置 |
| 超时 timeout | 一直卡住/filtered | 防火墙丢包或主机不可达 | 查防火墙/安全组规则 |
「拒绝」和「超时」的区别是精髓:拒绝是主机主动告诉你「没这服务」(有回应),超时是根本没人理你(无回应)。前者去查服务端进程,后者去查防火墙。
六、服务端视角:端口到底有没有监听
测端口是「客户端视角」。如果你能登上服务器,还要从「服务端视角」确认端口是否真的在监听:
ss -tlnp | grep 443 # 查看本机哪些端口在 TCP 监听(现代)
netstat -tlnp | grep 443 # 同上(传统)
- 有输出(
LISTEN状态)→ 服务确实在监听这个端口。若客户端还连不上,那就是防火墙问题。 - 没输出 → 服务根本没监听这个端口(没启动、或监听在
127.0.0.1只允许本机、或端口配错)。这时客户端测到的 refused 就说得通了。
「客户端测不通 + 服务端在监听」→ 防火墙;「客户端测不通 + 服务端没监听」→ 服务问题。两个视角一对照,问题就清楚了。
七、常见误区与追问
| 考点 | 正确口径 |
|---|---|
| 本机监听 | ss/netstat 查看端口是否 LISTEN |
| 链路连通 | telnet/nc/tcping 测 TCP 建连 |
| 策略检查 | 防火墙、安全组、ACL、负载均衡健康检查 |
server: ss -lntp | grep 8080
client: nc -vz host 8080
client: curl -v http://host:8080/
capture: tcpdump port 8080
端口排障要分清“服务有没有监听”和“客户端能不能连到这个监听”。
- 误区:服务器进程启动就代表端口可访问。 进程可能只监听 127.0.0.1,或被防火墙/安全组挡住。
- 误区:telnet 失败就一定是服务没启动。 也可能是路由不通、防火墙丢包、端口未暴露或负载均衡未转发。
- 误区:端口通就代表协议正确。 TCP 建连成功只说明端口通,HTTP/TLS/应用协议仍可能不匹配。
- 追问:refused 和 timeout 怎么区分? refused 通常收到 RST,timeout 通常是 SYN 无响应或被丢弃。
- 追问:为什么要在服务端抓包? 能确认客户端 SYN 是否到达,以及服务端是否返回 SYN+ACK/RST。
- 追问:云环境还要看哪些层? 安全组、网络 ACL、路由表、LB 监听、后端健康检查和容器端口映射。
八、加强记忆
测端口用 telnet 目标 端口(最通用、TCP 建连)、nc -vz(现代、支持端口范围和 UDP)、nmap -p(批量扫描、区分 open/closed/filtered)。核心:ping 通 ≠ 端口通——ping 到网络层(主机可达),端口测传输层(服务是否监听)。结果三分:成功=端口开 / refused=主机在但端口没服务(RST) / timeout=防火墙丢包(无回应)。配合服务端 ss -tlnp 看端口是否 LISTEN:连不上+在监听=防火墙,连不上+没监听=服务问题。