nc测试tcp端口核心是验证连接可达性而非传输数据,-zv参数实现静默探测,成功显示“succeeded!”,失败提示“connection refused”或“timed out”。

用 nc 测试 TCP 端口,核心是验证目标地址和端口能否建立连接,不传业务数据,只做连接试探。它比 telnet 更轻、更可控,也比 ping 多一层端口级判断。
单个端口快速验证
最常用场景:确认关键服务(如 SSH、HTTP)是否可达。
- 命令:nc -zv host port,例如 nc -zv example.com 22
- -z 表示零 I/O 模式,不传输数据,只尝试握手
- -v 显示过程,成功时输出类似:Connection to example.com 22 port [tcp/ssh] succeeded!
- 失败常见提示:Connection refused(端口关闭或服务未监听),Operation timed out(防火墙拦截、路由不通或主机宕机)
多个指定端口批量检测
适合检查一组常用服务,比如 Web、数据库、API 端口。
- 命令:nc -zv host port1 port2 port3,例如 nc -zv 10.0.0.5 80 443 3306 6379
- 加 -w 2 设置 2 秒超时,避免某个端口卡住拖慢整体:nc -zvw 2 10.0.0.5 80 443
- 加 -n 跳过 DNS 解析,尤其在域名解析慢或不可靠时更稳定:nc -znvw 2 192.168.1.100 22
连续端口范围扫描
用于初步摸底开放端口分布,比如查 1–1024 常用服务端口段。
- 命令:nc -zv host start-end,例如 nc -zv 192.168.1.100 20-100
- 注意:全端口扫描(1–65535)耗时长、易触发安全设备告警,生产环境慎用
- 部分新版系统中 -z 可能失效,可改用 nc -v host port 替代
结果过滤与实用技巧
让输出更干净、排查更高效。
- 只显示成功项:nc -zv host 22 80 443 2>&1 | grep succeeded
- 配合循环批量测多台主机:for ip in 10.0.0.{1..5}; do echo $ip; nc -zvw1 $ip 22; done
- 若返回 No route to host,先 ping -c 2 $ip 确认连通性;若 ping 通但 nc 失败,再登录目标机查 ss -tlnp | grep :port 是否真在监听











