一、引言
在Linux运维工程师的常用工具箱中,有一个小巧却功能强大的网络工具——Netcat,常被称作“网络瑞士军刀”。它是一款轻量级的命令行网络调试工具,支持TCP/UDP连接、端口扫描、网速测试、文件传输、简易聊天,甚至可作后门调试用途。令人惊喜的是,大多数Linux发行版都默认内置了Netcat;若未安装,通过包管理器几分钟即可完成部署。

二、安装 Netcat
1. Debian / Ubuntu 系列(apt)
直接安装netcat会提示虚拟包冲突,任选其一即可:
# 推荐 OpenBSD 版本,功能更规范
sudo apt install netcat-openbsd
# 传统版(老旧,部分参数行为不同)
sudo apt install netcat-traditional
2. CentOS / RHEL / Rocky(yum/dnf)
sudo dnf install nc
# 或旧版yum
sudo yum install nc
3. Alpine Linux
apk add netcat-openbsd
三、核心常用参数速览
-l 监听模式,充当服务端
-v 显示详细(verbose)信息
-z 只扫描端口,不发送数据
-u 使用UDP协议(默认TCP)
-n 跳过DNS解析,直接使用IP
-p 指定本地端口
四、实用实操案例
案例1:端口扫描(探测端口开放)
语法:
nc -vz 目标IP 起始端口-结束端口
示例:扫描192.168.0.102的1~100端口,打印详细日志
nc -vz 192.168.0.102 1-100
成功开放端口输出示例:
Connection to 192.168.0.102 port 53 [tcp/domain] succeeded!
Connection to 192.168.0.102 port 80 [tcp/http] succeeded!
补充:扫描UDP端口加 -u
nc -vzu 192.168.0.102 53
案例2:两台机器测速
原理很简单:服务端监听并丢弃数据,客户端生成大量零字节流传输,配合dd命令统计速度。
服务端(接收端):
nc -l 9999 > /dev/null
客户端(发送端):
# 发送100MB数据测试
dd if=/dev/zero bs=1M count=100 | nc 192.168.0.102 9999
输出示例(自动显示传输速率):
100+0 records in
100+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.001434 s, 73.1 GB/s
案例3:文件互传
场景A:A机器发文件 → B机器接收保存
接收端B(服务端,先执行):
nc -l 9999 > receive.tar.gz
发送端A:
nc 192.168.0.102 9999 < send.tar.gz
场景B:目录打包传输(配合tar)
适合传整个文件夹:
接收端:
nc -l 9999 | tar -zxvf -
发送端:
tar -zcf - /data/test | nc 192.168.0.102 9999
案例4:简易双向聊天
机器B监听:
nc -l 9999
机器A连接:
nc 192.168.0.102 9999
两端输入文字,实时互通,简单直接。
案例5:手动测试TCP服务连通性
替代telnet探测端口是否通:
nc -v 192.168.0.102 80
# 可直接发HTTP请求测试网站
GET / HTTP/1.1
Host: 192.168.0.102
五、补充注意事项
- 防火墙放行端口:使用
-l监听端口时,需在防火墙开放对应端口(如9999),否则外部无法连接。 - UDP扫描局限性:UDP无握手,
nc -zu扫描准确率低,生产环境端口探测推荐nmap。 - 安全风险:nc监听不加权限控制可被任意连接,生产环境禁止公网开放nc监听端口,避免被利用反弹shell。
- 两个版本差异:
netcat-traditional支持-e反弹shell,netcat-openbsd默认移除-e参数,渗透场景需注意版本选择。
六、总结
nc轻量无依赖,日常运维四大核心场景:
- 快速端口连通性探测
- 内网两台机器高速传文件
- 内网带宽测速
- 调试TCP/UDP网络服务
无论你是服务器运维新人还是老手,nc都是网络排错场景里绕不开的趁手兵器。
