不用网盘,Windows 和 Mac 用 croc 互传大文件
croc 用一段临时 code 让两台电脑会合,局域网优先直连,跨网时由中继转发端到端加密的文件。附安装、收发和安全使用方法。

Windows 给 Mac 临时传一个十几 GB 的文件,常见做法是先上传网盘,再让另一台电脑下载。两边明明都在线,文件却要多走一趟云端,还可能卡在容量、限速和登录验证上。
croc 是一个跨平台命令行传文件工具。发送端选中文件,程序生成一段临时 code;接收端输入同一段 code,双方会合后开始传输。它支持 Windows 、 macOS 、 Linux 和多种 BSD,也有 ARM 、 ARM64 、 RISCV64 等 Release 包。
截至 2026 年 7 月 20 日,GitHub 已有超过 3.6 万 Star,最新正式版是 v10.4.14,许可证为 MIT 。
先装到两台电脑
macOS:
brew install croc
Windows:
winget install schollz.croc
也可以使用 Scoop 或 Chocolatey:
scoop install croc
# 或
choco install croc
Arch 、 Fedora 和 Termux:
sudo pacman -S croc
sudo dnf install croc
pkg install croc
Debian 、 Ubuntu 目前没有项目维护的官方 apt 安装路径,可以到 GitHub Releases 下载对应压缩包和 checksums 文件。 checksum 可用于检查下载是否损坏,但项目没有为 v10.4.14 提供独立数字签名。源码安装可运行:
go install github.com/schollz/croc/v10@latest
构建要求应以当前 go.mod 为准:v10.4.14 声明需要 Go 1.25,README 中的 Go 1.22+ 已经落后。
三分钟完成第一次传输
发送一份文件:
croc send report.pdf
发送目录或多个项目:
croc send photos/
croc send a.txt b.pdf photos/
发送端会显示类似下面的一次性 code:
1234-word-word-word
Windows 接收端可以直接输入:
croc 1234-word-word-word
Linux 和 macOS 默认会拒绝把 secret 直接放进命令行参数,避免它出现在进程参数中。接收时直接运行:
croc
再在 Enter receive code: 提示中粘贴。这种方式也不会把 code 写进当前命令的 shell history 。脚本或自动化场景可以使用 CROC_SECRET 环境变量,但不要把含有真实 code 的赋值命令保存进 shell history:
CROC_SECRET='1234-word-word-word' croc
最好给接收文件单独建一个空目录:
mkdir -p ~/Downloads/croc-inbox
croc --out ~/Downloads/croc-inbox
运行后再按提示粘贴 code 。这样既不会把 code 写进当前命令的 shell history,也能避免接收文件与桌面、项目目录或家目录中的同名文件混在一起。

croc 终端收发演示,素材来自项目仓库。演示中的 code 只用于说明流程。
code 就是一张临时取件票

任何拿到完整 code 的人,都可能抢先进入这次传输。把它通过另一条可信渠道发给接收者,文件传完就丢弃,不要长期复用。
默认随机 code 比姓名、生日、123456 这类自定义值更稳妥。自定义 code 虽然只要求至少 6 个字符,但当前实现只把从第 6 个字符开始的内容用作 PAKE 密码;前五个字符不能计入密码强度。
程序默认会把 code 复制到剪贴板。敏感环境可以关闭:
croc --disable-clipboard send report.pdf
机密文件还可以先用独立工具加密归档,再通过不同渠道发送归档密码。 croc 的端到端加密保护传输内容,不负责判断对方发来的文件是否安全。
它实际怎么传
同一局域网内,croc 会尝试发现发送端临时启动的 relay,并让数据直接在局域网里传输。跨互联网直连失败时,文件密文会经过默认公网 relay 实时转发。

croc 仓库中的 relay 示意图。实际路径取决于局域网发现、 NAT 和防火墙。
默认中继是 croc.schollz.com,控制端口为 TCP 9009,通常还使用 9010~9013 作为并行数据通道。使用 croc 不要求用户自己做端口转发,但它并非互联网环境下的纯 P2P,也不能称作“文件永不经过服务器”。
当前主传输路径使用 PAKE 建立会话密钥,再通过 PBKDF2-HMAC-SHA-256 派生 32 字节密钥,控制消息和文件块由 AES-GCM 加密。公网 relay 正常情况下只转发端到端密文,看不到文件明文和文件名。
文件走公网 relay 时,会留下哪些元数据

文件经公网 relay 转发时,relay 会接触整段加密流量,可以观察连接到它的来源 IP 、连接时间、持续时间、 room 标识、连接数、流量大小和时序。这里的 room 标识由 code 前四个字符加固定字符串后计算 SHA-256 得到,与完整 code 不同。双方还会在端到端加密通道内交换部分地址和 machine ID 。
--pass 只能控制 relay 访问,不能提供基于 TLS 证书的服务器身份验证。 croc 适合临时文件传输,但不能据此宣称匿名或零元数据。
断了能不能续传
活跃连接中断后,v10 协议会按条件最多重连 10 次。程序完全退出后,再次传同一个文件也可能续传,但有明确前提:
- 发送端再次发送同一文件,并显式复用同一个 code;
- 接收端保留同名、同大小的未完成文件;
- croc 根据 32 KiB 全零块判断尚未写入的区域。
它使用同名同大小文件和全零块检测来恢复缺块,无法实现 rsync 式的任意增量同步。文件大小变化后会重新处理,网络故障类型不符合重连条件时也可能需要重传。
默认遇到同名文件会询问 Resume 或 Overwrite 。--yes 只跳过通用确认,不代表允许覆盖;无人值守覆盖还需要 --overwrite,普通用户不建议把这两个参数设成默认。
几个实用功能
发送一段文本:
croc send --text 'https://example.com'
生成二维码:
croc send --qr report.pdf
跳过常见大目录:
croc send --exclude 'node_modules,.venv' project/
croc send --git project/
--exclude 当前做的是不区分大小写的子串匹配,不支持精确 glob 。发送含密钥、配置和备份的目录前,应先显式检查文件清单,不能把排除规则当作安全边界。
强制只走局域网:
croc --local send report.pdf
croc --local
接收端运行第二条命令后,再按提示粘贴 code 。
访客 Wi-Fi 、客户端隔离、 VPN 或企业防火墙可能阻断局域网发现,这时 --local 会失败。
适合和不适合的场景
croc 很适合临时的一对一跨平台传输:电脑之间搬大文件、远程给同事交付构建包、在手机终端与电脑之间传文本或压缩包。它不需要注册账号,也不用先把文件完整上传到网盘。
它不适合多人长期分发、目录版本同步、陌生人公开投递,以及要求身份治理、审计记录和服务 SLA 的企业文件交换。接收陌生文件时,即使传输过程有端到端加密,也应放进空目录并按普通外来文件做安全检查。