Netcat 命令速查表 - 网络调试常用命令大全
判断某个端口通不通,netcat 是最短的一条路径:nc -zv host 80 逐个返回结果,加上 -w 设超时避免请求悬着,卡在哪个环节一目了然。但要清楚它的边界——nc 只做 TCP/UDP 连接与字节搬运,不解析协议,也不加密。所以抓 HTTP 响应头可以,传输敏感数据不行,那应当走 SSH 或 TLS。版本差异同样是个坑:macOS 自带的是 BSD 版 nc,与 GNU ncat 参数不通用,OpenBSD 版也不支持 -e,因此做端口转发或绑定 shell 时要转向 ncat 或 socat。表里按连接测试与端口扫描、文件数据传输、端口监听、代理转发、Banner 抓取与协议调试、高级选项与替代工具分组。
连接测试与端口扫描 6
nc -zv host 80检测目标 80 端口是否开放,最常用
nc -zv host 80 443 8080检查多个指定端口
nc -zv host 1-1000扫描 1-1000 端口范围
nc -vz -w 2 host 80带 2 秒超时检测端口
nc -uz host 8080UDP 模式检测端口
nc -4 host 80强制使用 IPv4 连接
文件与数据传输 6
nc -l 9999 > received.txt接收端:监听并保存到文件
nc host 9999 < file.txt发送端:发送文件
tar czf - dir | nc host 9999发送端:打包并发送目录
nc -l 9999 | tar xzf -接收端:接收并解压
dd if=/dev/sda | nc host 9999发送端:传输磁盘镜像
nc host 9999 | pv > disk.img接收端:带进度条接收镜像(需 pv)
端口监听 5
nc -l 8080监听本地 8080 端口等待连接
nc -l -p 8080监听(老版本 nc 语法,需 -p)
nc -l -k 8080保持监听,支持多个连接(BSD 版)
nc -lk 8080同上,合并写法
nc -lu 9090监听 UDP 端口
代理与转发 3
nc -l 1234 | nc target 80简易 TCP 代理转发
mkfifo pipe; nc -lk 8080 < pipe | nc target 80 > pipe双向端口转发(管道方式)
nc -l 1234 -e /bin/bash将 shell 绑定到端口(GNU nc,仅限授权测试)
Banner 抓取与协议调试 5
echo "" | nc host 22抓取 SSH 服务版本号
echo "" | nc host 25抓取 SMTP 服务 Banner
printf "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80发送原始 HTTP 请求
echo -e "GET / HTTP/1.0\r\n\r\n" | nc example.com 80查看 HTTP 响应头
nc host 3306抓取 MySQL 服务 Banner
高级选项与参数 7
-v / -vv详细输出 / 更详细输出
-z零 I/O 模式,仅扫描不发送数据
-w 2连接超时 2 秒
-k保持监听,支持多个连接(BSD 版)
-s 192.168.1.1指定源 IP 地址
-p 12345指定本地源端口
-u使用 UDP 协议
替代工具与对比 4
ncat host 80Nmap 的 ncat,支持 SSL 和访问控制
ncat --ssl host 443ncat 加密连接,替代明文 nc
socat - TCP:host:80socat 功能更强的替代,支持更多协议
nc --version查看 nc 版本,区分 BSD/GNU/OpenBSD 版
命令示例
快速检测端口是否开放
nc -zv example.com 443 2>&1-z 是零 I/O 模式只探测不发送数据,-v 输出结果。只对你有权测试的主机使用,端口扫描需先取得授权。
输出
nc: connect to example.com port 443 (tcp) succeeded! Connection to example.com 443 port [tcp/https] succeeded!
抓取服务 Banner 识别版本
echo "" | nc -w 2 example.com 22很多服务连上就先发一行版本信息。-w 2 设 2 秒超时,否则连到不响应的端口会一直挂着。
输出
SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.5
发送原始 HTTP 请求调试
printf "GET / HTTP/1.1\r\nHost: example.com\r\nConnection: close\r\n\r\n" | nc example.com 80直接发原始报文能验证 curl 之外的协议层行为。注意 CRLF 行尾,手写成 \n 在严格的服务端会解析失败。
输出
HTTP/1.1 200 OK Date: Wed, 30 Sep 2026 07:20:11 GMT Content-Type: text/html; charset=UTF-8 Content-Length: 1256 <!doctype html>...
常见坑与注意事项
- nc -l -e /bin/bash 会把 shell 绑定到端口,是典型的反弹 shell 手法,仅限自己机器的授权测试。
- 端口扫描需事先取得书面授权,未经授权扫描在多数司法辖区都可能违法。
- nc 的选项在 BSD/GNU/OpenBSD 版本间不兼容,老版本监听需加 -p;先 nc --version 确认。
- 用 nc 传输文件默认无加密也无完整性校验,敏感数据走 SSH 或加密通道。
- -l 监听会占用端口且无认证,暴露在公网上等于把服务开放给所有人。
提示
- macOS 自带的 nc 是 BSD 版本,参数和 GNU ncat 不同,排障时注意区分。
- 端口扫描仅用于授权范围内的网络排查,未经授权扫描属违规行为。
- nc 传输不加密,敏感数据不要直接用 nc 传,走 SSH 或 TLS。
- OpenBSD 版 nc 不支持 -e 参数,需要绑定 shell 时用 ncat 或 socat 替代。
- 传输大文件时发送端用 pv 显示进度:pv file.txt | nc host 9999。
- 做端口转发推荐用 socat 或 ncat,功能更完善且支持持久连接。
- nc -zvw3 host 443 合并使用可同时做到探测、超时与显示详细过程,比先 ping 再连更快判断。
- 发送端加 -q 1 让 nc 在 stdin 结束后多等一秒再退出,否则响应还没回来连接就已断开。
- nc 只能建 TCP 连接;要确认服务实际能处理请求,用 curl -v 或 openssl s_client 再验一层。
由 巧匠 维护
公开更新于 2026年7月21日,内容持续校对官方文档。