nc -zvw 2 192.168.1.10 22 80 443 3306 6379 8080 可快速扫描单台服务器关键tcp端口,成功显示“succeeded!”,失败提示connection refused或timed out,-w 2防卡死。

用 nc(Netcat)快速扫描内网段中某台服务器的 TCP 端口,核心是利用其 -z(零 I/O 扫描)和 -v(详细输出)选项发起连接尝试,不传输实际数据,只判断能否建立 TCP 连接。
确认 nc 已安装并可用
多数现代 Linux 发行版默认不带传统 netcat,而是装了 ncat(来自 nmap)。注意:
• CentOS 7/8+ 的 nc 命令常是 ncat 的符号链接,-z 参数可能不可用;
• 若执行 nc -zv 192.168.1.10 22 报错或无响应,先验证真实版本:
- 运行
nc -h | grep -i "zero"或ncat -h | grep -i "scan"查看是否支持扫描模式 - 若不支持
-z,可改用nc -w 2 192.168.1.10 22 模拟轻量探测(需配合超时避免卡住) - 推荐直接安装经典版:
sudo apt install netcat(Ubuntu/Debian)或从 SourceForge 编译安装 netcat 0.7.1
单台服务器指定端口范围扫描
适用于已知目标 IP,想快速检查常用服务端口(如 22、80、443、3306、6379 等):
- 扫描连续端口:例如查 20–25、80–85、443、8000–8010:
nc -zv 192.168.1.10 20-25 80-85 443 8000-8010 2>&1 | grep succeeded - 扫描离散关键端口(更常用、更快):
nc -zv 192.168.1.10 22 80 443 3306 6379 8080 - 加超时控制(防卡死):
nc -zvw 2 192.168.1.10 22 80 443(-w 2表示 2 秒超时)
批量扫描同一内网段多台服务器的固定端口
比如检查整个 192.168.1.0/24 段的 SSH(22)端口是否开放,可用 shell 循环 + nc:
- 简单循环(适合少量主机):
for ip in $(seq 1 254); do echo "=== 192.168.1.$ip ==="; nc -zvw 1 192.168.1.$ip 22 2>&1 | grep -E "(succeeded|open)"; done - 静默输出仅显示开放结果:
for ip in {1..254}; do nc -zvw 1 192.168.1.$ip 22 >/dev/null 2>&1 && echo "SSH open: 192.168.1.$ip"; done - 注意:此方式无并发,较慢;如需提速,可结合
parallel或改用nmap -sn先 ping 探活再扫端口
识别结果与常见误区
nc 的输出含义直接但有限:
-
Connection to 192.168.1.10 22 port [tcp/ssh] succeeded!→ 端口开放且接受连接 -
nc: connect to 192.168.1.10 22 (tcp) failed: Connection refused→ 端口关闭或服务未监听 -
nc: connect to 192.168.1.10 22 (tcp) failed: No route to host→ 主机不可达(可能关机、防火墙丢包、IP 错误) -
nc: connect to 192.168.1.10 22 (tcp) failed: Connection timed out→ 可能被防火墙拦截(SYN 包发出去但没回),nc 无法区分“过滤”和“关闭”
它不提供服务识别、版本信息或 UDP 支持(除非用 -u 且版本兼容),纯属连通性验证工具。











