golang跨计算机安全传输文件和文件夹插件库croc的使用

Golang跨计算机安全传输文件和文件夹插件库croc的使用

关于croc

croc

croc是一个工具,它允许任何两台计算机简单且安全地传输文件和文件夹。据我所知,croc是唯一一个CLI文件传输工具,它实现了以下所有功能:

  • 允许任意两台计算机传输数据(使用中继)
  • 提供端到端加密(使用PAKE)
  • 实现简单的跨平台传输(Windows、Linux、Mac)
  • 允许多文件传输
  • 允许恢复中断的传输
  • 不需要本地服务器或端口转发
  • IPv6优先,IPv4作为备用
  • 可以使用代理,如Tor

安装

通用安装方法

curl https://getcroc.schollz.com | bash

在macOS上

使用Homebrew:

brew install croc

使用MacPorts:

sudo port selfupdate
sudo port install croc

在Windows上

使用Scoop、Chocolatey或Winget:

scoop install croc

choco install croc

winget install schollz.croc

从源代码构建

需要Go 1.22+:

go install github.com/schollz/croc/v10@latest

使用示例

基本文件传输

发送文件:

$ croc send [file(s)-or-folder]
Sending 'file-or-folder' (X MB)
Code is: code-phrase

接收文件:

croc code-phrase

使用自定义代码短语

croc send --code [code-phrase] [file(s)-or-folder]

发送文本

croc send --text "hello world"

使用管道

发送:

cat [filename] | croc send

接收:

croc --yes [code-phrase] > out

完整的Go示例代码

package main

import (
	"fmt"
	"os/exec"
)

func main() {
	// 示例1:发送文件
	sendCmd := exec.Command("croc", "send", "example.txt")
	output, err := sendCmd.CombinedOutput()
	if err != nil {
		fmt.Printf("发送文件失败: %v\n", err)
		return
	}
	fmt.Printf("发送成功: %s\n", output)

	// 示例2:接收文件(需要手动输入代码短语)
	// 在实际应用中,你可能需要从用户输入或其他方式获取代码短语
	receiveCmd := exec.Command("croc", "123-456-789")
	output, err = receiveCmd.CombinedOutput()
	if err != nil {
		fmt.Printf("接收文件失败: %v\n", err)
		return
	}
	fmt.Printf("接收成功: %s\n", output)

	// 示例3:发送文本
	sendTextCmd := exec.Command("croc", "send", "--text", "Hello from Go!")
	output, err = sendTextCmd.CombinedOutput()
	if err != nil {
		fmt.Printf("发送文本失败: %v\n", err)
		return
	}
	fmt.Printf("文本发送成功: %s\n", output)
}

高级功能

使用代理

croc --socks5 "127.0.0.1:9050" send SOMEFILE

自托管中继服务器

运行中继:

croc relay

使用自定义中继发送文件:

croc --relay "myrelay.example.com:9009" send [filename]

Docker运行中继

docker run -d -p 9009-9013:9009-9013 -e CROC_PASS='YOURPASSWORD' schollz/croc

注意事项

在Linux和macOS上,为了安全考虑,接收文件时应使用环境变量传递密码:

CROC_SECRET=*** croc

croc是一个功能强大且安全的文件传输工具,特别适合在不同计算机之间快速共享文件,同时保证数据传输的安全性。


更多关于golang跨计算机安全传输文件和文件夹插件库croc的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html

1 回复

更多关于golang跨计算机安全传输文件和文件夹插件库croc的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


使用Croc进行跨计算机安全传输文件和文件夹

Croc是一个用Go编写的开源工具,可以在计算机之间轻松安全地传输文件和文件夹。它使用中继服务器来建立点对点连接,支持端到端加密,且不需要复杂的配置。

Croc的主要特点

  1. 简单易用:只需一个命令即可发送和接收文件
  2. 安全传输:使用PAKE(密码认证密钥交换)进行端到端加密
  3. 跨平台:支持Windows、macOS和Linux
  4. 自动中继:当直接连接失败时会自动使用中继服务器
  5. 恢复传输:支持中断后继续传输

安装Croc

使用Go安装

go install github.com/schollz/croc/v9@latest

其他安装方式

# Linux/macOS
curl https://getcroc.schollz.com | bash

# Windows
iwr https://getcroc.schollz.com | iex

基本使用方法

发送文件

croc send myfile.txt

接收文件

接收方会看到发送方提供的代码短语,只需运行:

croc [code-phrase]

Golang代码示例

以下是使用Croc作为库在Go程序中传输文件的示例:

package main

import (
	"fmt"
	"log"
	"time"

	"github.com/schollz/croc/v9/src/croc"
)

func main() {
	// 发送文件示例
	go sendFile()

	// 接收文件示例
	time.Sleep(1 * time.Second) // 等待发送端准备好
	receiveFile()
}

func sendFile() {
	sender, err := croc.New(croc.Options{
		IsSender:       true,
		SharedSecret:   "secret-code", // 自定义传输码
		Debug:          true,
		RelayAddress:   "croc.schollz.com", // 中继服务器地址
		RelayPorts:     []string{"9009", "9010", "9011", "9012", "9013"},
		RelayPassword: "pass123",
	})
	if err != nil {
		log.Fatal(err)
	}

	// 发送单个文件
	err = sender.Send(croc.TransferOptions{
		PathToFiles: []string{"testfile.txt"},
	})
	if err != nil {
		log.Fatal(err)
	}
}

func receiveFile() {
	receiver, err := croc.New(croc.Options{
		IsSender:       false,
		SharedSecret:   "secret-code", // 必须与发送方相同
		Debug:          true,
		RelayAddress:   "croc.schollz.com",
		RelayPorts:     []string{"9009", "9010", "9011", "9012", "9013"},
		RelayPassword: "pass123",
	})
	if err != nil {
		log.Fatal(err)
	}

	err = receiver.Receive()
	if err != nil {
		log.Fatal(err)
	}

	fmt.Println("文件接收完成!")
}

高级功能

发送整个文件夹

err = sender.Send(croc.TransferOptions{
	PathToFiles: []string{"myfolder"},
})

自定义端口和中继

sender, err := croc.New(croc.Options{
	IsSender:       true,
	SharedSecret:   "my-secret",
	RelayAddress:   "my-relay.example.com",
	RelayPorts:     []string{"1234", "1235"},
	RelayPassword: "my-password",
})

进度回调

err = receiver.ReceiveWithOptions(croc.ReceiveOptions{
	SavePath: "./downloads",
	ProgressCallback: func(progress float64) {
		fmt.Printf("传输进度: %.2f%%\n", progress*100)
	},
})

安全注意事项

  1. Croc使用端到端加密,确保只有知道共享密钥的双方可以访问数据
  2. 默认情况下,Croc会生成随机密码短语,建议使用这些随机短语而非自定义短语
  3. 可以自建中继服务器以获得更好的隐私保护

自建中继服务器

# 运行中继服务器
croc relay

然后在客户端代码中指定自建中继地址:

sender, err := croc.New(croc.Options{
	RelayAddress: "your-server-ip",
})

Croc是一个非常实用的文件传输工具,特别适合需要在不同计算机之间快速安全传输文件的场景。它的Go实现使其可以轻松集成到其他Go程序中。

回到顶部