灯下哥谭 灯下哥谭
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

灯下哥谭

灯还亮着
首页
关于
  • Hermes Agent 平台
  • Claude Code
  • OpenClaw
  • GPU 推理节点运维
  • MySQL 运维知识地图
  • Elasticsearch 运维知识地图
  • Redis 运维知识地图
  • TiDB 体系
  • DBA 常用 SQL 与命令
  • Nginx 运维知识地图
  • Prometheus 监控
  • Docker
  • Systemd
  • Iptables
  • Firewalld
  • Sshd
  • MySQL8 运维 SOP 手册
  • MySQL 实战 45 讲(读书笔记)
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 工作笔记

    • 实用linux命令-nc
      • 场景一:文件传输
      • 场景二:端口连通性测试
      • 场景三:简易服务器与调试
      • 场景四:加密传输(配合 openssl)
      • 场景五:UDP 调试
      • 场景六:代理与流量转发
      • 常用参数速查表
      • 坑与边界
    • 实用linux命令-lsof
    • 实用linux命令-ss
    • Bash 备忘清单
    • Ansible 备忘清单
    • Linux 文件权限的三个反直觉陷阱
    • GPT分区使用 `parted` 扩展分区的操作流程
    • 实用linux命令-sed
    • VSCode快捷键备忘录
    • 实用linux命令-curl
  • 容器与编排

  • Nginx

  • 监控

  • 网络安全

  • 其他

  • Linux笔记
  • 工作笔记
灯下哥谭
2022-03-10
目录

实用linux命令-nc

本文定位:速查手册。 按使用场景组织 nc 的常用调用方式,供现场对照执行,不展开底层网络原理。

版本说明

本文基于 OpenBSD nc(绝大多数 Linux 发行版默认安装)和 GNU nc(部分老系统)整理。两者参数兼容,但 OpenBSD nc 的 -v 输出更详细。macOS 自带的是 BSD 分支,与本文 Linux 命令基本一致。下文命令均以 OpenBSD nc 为准;GNU nc 若参数不同会单独注明。


# 场景一:文件传输

nc 最常见的用途——两端建立 TCP 连接直接传文件,不需要 ftp/scp/rsync。

发送文件:

nc -l 1234 < /path/to/file.tar.gz
1

接收文件(在另一台机器执行):

nc 192.0.2.11 1234 > file.tar.gz
1

易错点:发送端必须先启动监听(-l),否则接收端连接会失败。若顺序错误,接收端会立即退出并生成空文件。

发送文件夹(tar + nc 管道):

tar zcvf - /path/to/dir/ | nc -l 1234
nc 192.0.2.11 1234 | tar zxvf -
1
2

显示传输进度(配合 pv):

tar zcvf - /path/to/dir/ | pv | nc -l 1234
1

# 场景二:端口连通性测试

替代 telnet 的轻量级方案,无需安装额外工具。

测试单端口是否开放:

nc -zv 192.0.2.11 80
1
  • -z:零 I/O 模式(只探测,不发送数据)
  • -v:显示详细输出

批量扫描端口范围:

nc -zv 192.0.2.11 20-100
1

指定超时避免挂起(扫描防火墙后的主机时尤其重要):

nc -zv -w 3 192.0.2.11 22
1
  • -w 3:3 秒超时

易错点:nc 的端口扫描是串行的,大范围扫描(如 1-65535)极慢。批量端口探测请用 nmap。


# 场景三:简易服务器与调试

临时模拟服务或转发数据,用于开发调试。

模拟 TCP 服务器(回显模式):

nc -l 8080
1

执行后 nc 在本机 8080 端口监听,任何连接过来的数据都会原样返回。

发送 HTTP 请求测试:

printf "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n" | nc example.com 80
1

创建简易聊天通道:

机器 A 执行:

nc -l 12345
1

机器 B 执行:

nc 192.0.2.11 12345
1

连接建立后,任一方输入内容按回车,对方立即收到。


# 场景四:加密传输(配合 openssl)

nc 本身不加密,敏感数据需配合 openssl 做端到端加密。

发送端加密传输:

tar zcvf - /path/to/dir/ | openssl enc -aes-256-cbc -salt | nc -l 1234
1

接收端解密:

nc 192.0.2.11 1234 | openssl enc -d -aes-256-cbc -salt | tar zxvf -
1

执行时会提示输入密码,两端密码需一致。


# 场景五:UDP 调试

DNS、SNMP、NTP 等协议基于 UDP,nc 的 UDP 模式可用于调试。

启动 UDP 监听:

nc -u -l 53
1

发送 UDP 数据包:

echo "test" | nc -u 192.0.2.11 53
1

差异点:UDP 是无连接的,nc -u -l 不会显示连接建立信息,收到数据时直接显示内容。

易错点:UDP 不保证数据到达,也没有重传机制。测试 DNS 等协议时无响应不一定是网络问题,可能是协议格式不匹配。如需可靠传输请用 TCP 模式。

排查 DNS 示例:

# 向指定 DNS 服务器发送 UDP 探测
nc -u -v 8.8.8.8 53
1
2

# 场景六:代理与流量转发

nc 可作为简易代理中转流量。

TCP 端口转发(将本地 8080 转发到远程 80):

nc -l 8080 -c "nc remote.server.com 80"
1

使用场景:临时绕过防火墙限制,或在调试时拦截/查看流经某端口的数据。


# 常用参数速查表

参数 含义 典型用法
-l 监听模式(服务端) nc -l 8080
-p PORT 指定本地端口 nc -p 1234 192.0.2.11 80
-z 零 I/O 模式(扫描用) nc -zv host port
-v 详细输出 nc -zv host 22
-w SEC 超时秒数 nc -w 3 host port
-n 不解析 DNS(纯 IP) nc -nv 192.0.2.11 80
-u UDP 模式(默认 TCP) nc -u -l 53
-k 监听持续接受(默认一次) nc -kl 8080

# 坑与边界

1. 权限问题

低端口(<1024)需要 root 权限:

sudo nc -l 80
1

2. 连接不自动关闭

nc 传输完成后不会自动关闭连接,需要发送端按 Ctrl+C 或接收方断开。批量脚本中应配合 -w 1(发送完成后 1 秒自动关闭)。

3. 与 ncat/socat 的关系

  • nc:最原始的 netcat,功能简单,几乎所有系统自带
  • ncat(nmap 套件):支持 SSL、代理、同时多连接,功能更现代
  • socat:最强大,支持 Unix socket、文件描述符转发,但语法复杂

选型建议:临时调试用 nc,生产脚本用 ncat,复杂转发用 socat。


🤖 Agent 可直接解析的元数据块(点击展开)
{
  "_meta": {
    "doc_version": "2022-03-10",
    "article_id": "linux-nc-cheatsheet",
    "profile_context": "any",
    "estimated_setup_time": "5min"
  },
  "quick_start": {
    "send_file": "nc -l 1234 < file.tar.gz",
    "receive_file": "nc 192.0.2.11 1234 > file.tar.gz",
    "port_scan": "nc -zv host 80",
    "port_range_scan": "nc -zv host 20-100",
    "simple_server": "nc -l 8080",
    "http_test": "printf 'GET / HTTP/1.1\\r\\nHost: host\\r\\n\\r\\n' | nc host 80"
  },
  "safety_rules": [
    "nc 明文传输,敏感数据必须配合 openssl 加密",
    "公网环境避免直接使用 nc 暴露端口",
    "大范围端口扫描请用 nmap,nc 太慢"
  ],
  "verification": {
    "listen_success": "ss -tlnp | grep :1234",
    "transfer_complete": "ls -lh file.tar.gz && md5sum file.tar.gz"
  }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
#SRE#Linux
上次更新: 9/4/2026

实用linux命令-lsof→

最近更新
01
当监控说没事而 DMV 说有事——N9E 与 SQL Server 指标交叉验证实战 原创
08-28
02
TiKV 节点 CPU 周期性打满,进程却只占 4%:一次热点 Region 的逆向排查 原创
08-28
03
托管 SQL Server 的运维边界:哪些 DBA 手段会失效,以及用什么替代 原创
08-28
更多文章>
Theme by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式