nc传输需先确认版本与端口连通性,老版用nc -l 7777,新版须加-p参数;Ubuntu默认用ncat更稳;重定向方向要正确;大文件必须校验md5;-v参数可查看连接状态;避免用常用端口;中断会导致文件截断。

能用,但必须先确认 nc 版本和端口连通性,否则会卡住没反应、文件传空或中途断连。
nc -l 命令在不同版本中参数差异大
老版本(如 CentOS 6 的 nc-1.84)直接写 nc -l 7777 就行;新版本(如 Ubuntu 22.04 自带的 ncat 或 OpenBSD 版 nc)必须加 -p: nc -l -p 7777。不加会报错 nc: missing port argument 或静默退出。
- 查当前 nc 类型:运行
nc -h 2>&1 | head -n1,看到netcat-openbsd就是新版本,需带-p - Ubuntu/Debian 默认装的是
ncat,可用ncat -l -p 7777替代,行为更稳定 - 如果只写
nc -l7777(无空格),部分 shell 会误解析为-l7777(把 7777 当作选项参数),导致监听失败
重定向写法必须严格匹配数据流向
接收端用 >,发送端用 ,顺序反了就传不进去——<code>nc -l 7777 > recv.bin 是对的,nc -l 7777 会把本地文件当输入去“发”,但没人连它,进程就卡住不动。
- 接收方命令必须先执行并保持运行:
nc -l -p 7777 > /tmp/file.tar.gz - 发送方再执行:
nc 10.0.1.162 7777 - 传输完成,发送端退出后,接收端
nc进程自动结束,文件才真正落盘 - 别用
cat file | nc ...代替,前者在大文件下容易因缓冲区满而阻塞,且无法感知 EOF 是否被正确传递
内网传输失败的三个高频原因
两台机器都在内网,不代表一定能通——防火墙、网卡绑定、路由策略都可能拦住 nc 流量。
- 接收端检查端口是否真在监听:
ss -tlnp | grep :7777或netstat -tlnp | grep :7777,没输出说明nc没起来或被拒绝绑定 - 发送端先测连通性:
nc -zv 10.0.1.162 7777,返回succeeded!才继续;若超时,可能是防火墙(iptables/nftables)或云平台安全组未放行 - 接收端若有多网卡,
nc -l默认只监听localhost(127.0.0.1),要指定网卡 IP:nc -l -s 10.0.1.162 -p 7777 > file,否则发送端连不上
大文件传输时校验和日志不能省
nc 不校验完整性,传 5GB 文件差一个字节也不会报错,靠肉眼根本发现不了。
- 发送前算一次:
md5sum /path/to/file.tar.gz,记下 hash - 接收后立刻验证:
md5sum /tmp/file.tar.gz,两值必须完全一致 - 加
-v参数看连接状态:nc -v -l -p 7777 > file,成功建立连接时会打印Connection from ... - 别用
80或443等常用端口做临时传输——可能被公司网络策略拦截或与其他服务冲突
最易忽略的一点:传输过程中任意一方 Ctrl+C 中断,接收端文件就是截断状态,且 nc 不会提示。务必等发送端命令彻底退出后再去校验,而不是看屏幕“好像结束了”。


















