croc:让文件传输像聊天一样简单
Go编写的croc工具通过PAKE加密和中继架构,实现了无需公网IP、零配置的安全文件传输,支持断点续传、多文件传输和Tor代理,是开发者必备的命令行利器。

作为一个被 Spring Boot 启动时间折磨多年的 Java 老兵,看到 croc 这种「开箱即用、零配置、安全可靠」的命令行工具,我简直感动得想给作者送锦旗!
它到底解决了什么痛点?
想象一下:你想把一个 2GB 的视频文件发给同事,但微信限制 100MB,邮件附件也超了,网盘又慢又需要注册。这时候你可能会想到 FTP、SFTP、甚至临时搭个 HTTP 服务器……但这些方案要么复杂,要么不安全,要么依赖公网 IP。
croc 就像一个「加密快递员」——你只要告诉对方一串密码(code phrase),他就能在任何网络环境下安全地收到你的文件,全程端到端加密,中间人完全无法窥探内容。而且它支持断点续传、多文件传输、跨平台(Windows/Linux/macOS/Android 全都行),连 Tor 代理都能走!
技术架构亮点
从 README 和项目描述来看,croc 的核心设计非常精巧:
- 基于中继(Relay)的 P2P 架构:两个客户端不需要直接连通,而是通过公共中继服务器交换数据。这解决了 NAT 穿透和防火墙问题。
- PAKE(Password-Authenticated Key Exchange)加密:使用密码短语生成共享密钥,即使密码较弱也能防止离线字典攻击。这是比简单 AES+密码更安全的做法。
- IPv6 优先 + IPv4 回退:紧跟现代网络趋势,同时保证兼容性。
- Go 语言实现:单二进制文件、跨平台编译、高并发性能,完美契合 CLI 工具的需求。
这种设计让我想起乐高积木——每个模块(加密、传输、中继)都独立可替换,但组合起来却异常稳固。
安装与使用:简单到离谱
最让我震惊的是它的安装方式。一行 curl 命令搞定:
bash
## 一键安装,适用于 Linux/macOS
curl https://getcroc.schollz.com | bash
或者用你熟悉的包管理器(Homebrew、Scoop、Chocolatey、pacman、dnf……几乎全覆盖)。作为 Java 开发者,我已经习惯了 Maven 依赖冲突、Gradle 缓存爆炸,而 croc 这种「下载即运行」的体验简直是天堂。
核心用法示例
发送文件?两步走:
bash
## 发送端:执行后会生成一个 code phrase
croc send my-video.mp4
## 输出: Code is: autumn-tiger-rocket
## 接收端:输入 code phrase 即可接收文件
croc autumn-tiger-rocket
就这么简单!没有 IP 配置,没有端口开放,没有账号密码。更骚的是,它还能传文本:
bash
## 直接传输纯文本,接收方终端直接显示内容
croc send --text "会议链接:https://meet.example.com/abc123"
对方直接收到纯文本,不用解压、不用找文件。
高级功能:企业级能力
虽然用法简单,但 croc 并不简陋。它提供了很多生产级特性:
- 自建中继服务器:公司内网可以部署私有 relay,避免走公共服务器。
- 代理支持:
--socks5参数让你通过 Tor 匿名传输。 - 管道支持:可以和 shell pipeline 无缝集成,比如
tar -czf - folder | croc send。 - 安全增强:Linux/macOS 默认将密码作为环境变量传递,避免出现在
ps进程列表中(CVE-2023-43621 防护)。
自建 relay 的 Docker 命令也很简洁:
bash
## 部署私有中继服务器,指定密码保护
docker run -d -p 9009-9013:9009-9013 -e CROC_PASS='YOURPASSWORD' schollz/croc
这里开放了 5 个端口(9009-9013),分别用于 TCP 中继、UDP 打洞、WebRTC 信令等不同传输通道,确保在各种网络环境下都能建立连接。
适合谁用?
- 开发者:快速分享日志、dump 文件、构建产物。
- 运维人员:安全传输配置文件、证书。
- 普通用户:替代微信/QQ 文件传输,尤其适合大文件。
- 隐私敏感者:端到端加密 + Tor 支持,比网盘更安全。
上手难度?几乎为零。只要会敲命令行,5 秒钟就能学会。
潜在坑点
- 公共 relay 依赖:默认使用作者提供的中继服务器,虽然代码开源可审计,但企业环境可能要求私有化部署。
- 无图形界面:虽然有第三方 Android GUI,但桌面端还是命令行为主。不过对技术用户来说这反而是优点——脚本化、自动化更方便。
- Go 版本要求:从源码构建需要 Go 1.22+,老系统可能需要升级。
我的看法
作为 Java 后端,我经常需要在服务器之间传文件。以前用 scp,但要配 SSH 密钥;用 rsync,但要开 rsyncd。croc 完美解决了「临时、安全、跨网络」的文件传输场景。
如果让我用,我会:
- 在公司内网部署私有 relay,设置强密码。
- 写个 wrapper 脚本,自动加上
--overwrite --yes参数,用于自动化任务。 - 结合 CI/CD,在构建失败时自动把日志发给值班同事。
值不值得学?绝对值得!即使你不写 Go,理解它的 PAKE 加密模型、中继架构设计,对设计分布式系统也有启发。而且,谁能拒绝一个让文件传输变得像聊天一样简单的工具呢?
总之,croc 是那种「一旦用过就回不去」的工具。它用极简的 UX 隐藏了复杂的底层技术,这才是真正优秀的开发者工具该有的样子。