使用 nc 在两台主机之间传输文件
介绍如何使用 nc(Netcat)在两台主机之间传输文本或二进制文件,并补充进度显示、数据转发和安全注意事项。
nc(Netcat)是一个轻量级网络工具,可以通过 TCP 或 UDP 连接读写数据。借助 Shell 的管道和重定向功能,它可以快速在两台主机之间传输文本或二进制文件。
nc不提供加密、身份认证和完整性校验。建议仅在可信网络中临时使用;传输敏感文件时,请优先选择scp、sftp或rsync -e ssh。
快速上手
假设接收端 IP 为 10.26.27.130,监听端口为 1234。
接收端:先监听端口
nc -l 1234 > citybanner.txt
发送端:发送文件
nc 10.26.27.130 1234 < citybanners_0809.txt
也可以使用管道:
cat citybanners_0809.txt | nc 10.26.27.130 1234
传输完成后,可以在两端计算摘要,确认文件是否完整:
sha256sum citybanner.txt
sha256sum citybanners_0809.txt
macOS 可使用:
shasum -a 256 citybanner.txt
shasum -a 256 citybanners_0809.txt
显示传输进度
如果已安装 pv,可以在发送端显示传输量、速度和进度:
pv file.txt | nc 192.168.1.1 20000
接收端仍然先执行:
nc -l 20000 > file.txt
常用参数
-l:监听模式,即作为接收连接的一端。-p:指定本地端口。部分nc实现要求监听时使用,另一些实现不允许与-l同时使用。-n:不进行 DNS 解析,将地址直接视为 IP。-u:使用 UDP;默认使用 TCP。-v:显示更详细的连接信息。-w <秒数>:设置连接或空闲超时时间,具体行为取决于nc实现。
不同系统自带的 nc 可能是 OpenBSD Netcat、GNU Netcat 或 Ncat,参数存在差异。请先运行以下命令查看本机支持的语法:
nc -h
例如,常见监听写法有两种:
# OpenBSD Netcat(常见于 macOS、BSD 和部分 Linux 发行版)
nc -l 10000
# 部分传统 Netcat 版本
nc -l -p 10000
Windows 用户可以使用 Nmap 项目提供的 Ncat,或根据需要选择其他可信的 Netcat 实现。
命令行数据通信
服务端
nc -l 10000
客户端
nc -n 192.168.1.100 10000
连接建立后,任意一端输入内容并按回车,数据就会发送到另一端。连接关闭后,大多数 nc 实现会随之退出。
通常,一个监听中的 nc 一次只处理一个连接。如果需要持续接收多个连接,应使用当前实现提供的保持监听参数,或通过脚本循环启动 nc。
文件传输
文本文件和二进制文件都可以通过标准输入、标准输出进行传输。下面统一使用兼容 OpenBSD Netcat 的监听语法;如果本机要求 -p,请改为 nc -l -p 10000。
服务端向客户端发送文件
服务端发送:
nc -l 10000 < source.bin
客户端接收:
nc -n 192.168.1.100 10000 > target.bin
客户端向服务端发送文件
服务端接收:
nc -l 10000 > target.bin
客户端发送:
nc -n 192.168.1.100 10000 < source.bin
如果发送完成后连接没有自动关闭,可以根据本机版本使用 -N、-q 0,或手动结束发送端。具体支持情况以 nc -h 为准。
数据转发
通过管道连接多个 nc 进程,可以实现简单的数据中转。使用前请确认防火墙允许相关端口,并确保监听端先启动。
单向数据中转
中转端先监听两个端口:
nc -l 10000 | nc -l 10001
客户端 1 向中转端发送数据:
nc -n 192.168.1.100 10000 < source.txt
客户端 2 从中转端接收数据:
nc -n 192.168.1.100 10001 > target.txt
双向数据转发
普通管道只能单向传输。借助命名管道(FIFO),可以建立简单的双向转发。
客户端 1 先监听:
nc -l 10000
中转端执行:
mkfifo nc-relay.fifo
cat nc-relay.fifo | nc -n 192.168.1.100 10000 | nc -l 10001 > nc-relay.fifo
客户端 2 连接中转端:
nc -n 192.168.1.100 10001
使用完毕后删除命名管道:
rm nc-relay.fifo
这种方式适合临时调试,不适合作为长期运行的转发服务。生产环境应使用具备访问控制、日志和加密能力的专用工具。
本文整理自 CSDN 博主「xflm」的文章,原文遵循 CC BY-SA 4.0 协议: