golang跨计算机快速文件传输命令行工具插件portal的使用
Golang跨计算机快速文件传输命令行工具插件Portal的使用
Portal简介
Portal是一个命令行文件传输工具,用于在任何计算机之间发送文件。
安装方法
macOS/Linux (使用Homebrew)
brew install portal
Windows (使用Scoop)
scoop install portal
Windows (使用WinGet)
winget install SpatiumPortae.portal
Arch Linux (AUR)
yay -S portal-bin
手动安装
curl -sL portal.spatiumportae.com | bash
或
wget -qO - portal.spatiumportae.com | bash
使用方法
发送文件和文件夹
portal send <文件1> <文件2> <文件夹1> <文件夹2> ...
命令会输出一个临时密码,格式如1-inertia-elliptical-celestial
。发送方需要将这个密码通过安全渠道告知接收方。
接收文件和文件夹
portal receive 1-intertia-elliptical-celestial
双方将通过中继服务器建立连接。文件传输将根据实际情况使用直接连接或中继连接。
功能特点
- 使用PAKE2进行端到端加密
- 可能的情况下直接传输文件(如同一个本地网络)
- 无法直接连接时回退到中继服务器
- 文件的并行gzip压缩,更快更高效
- 可以自建中继服务器
- 可配置性和shell自动补全
- 美观的用户界面
完整示例
发送文件示例
# 发送多个文件和文件夹
portal send document.pdf image.jpg ~/my_folder
输出:
Generated password: 42-relative-parsec-supernova
Please share this password with the receiver.
接收文件示例
# 接收文件
portal receive 42-relative-parsec-supernova
输出:
Receiving files from sender...
Progress: [====================================] 100%
Files saved to: /path/to/received_files
配置
Portal的配置文件位于$HOME/.config/portal/config.yml
,是一个简单的YAML文件。
默认配置
# 中继服务器URL
relay: portal.spatiumportae.com
# 记录调试输出到文件
verbose: false
# 接收文件时提示覆盖重复文件
prompt_overwrite_files: true
# 使用"portal serve"时中继服务器使用的端口
relay_serve_port: 8080
# TUI样式
tui_style: rich
自建中继服务器
Portal二进制文件内置了中继服务器功能。启动自己的中继服务器非常简单:
portal serve --port 1337
建议将服务器日志输出通过jq处理:
portal serve --port 1337 2>&1 | jq .
示例输出:
{
"level": "info",
"ts": "2023-02-28T02:57:45.310134+01:00",
"caller": "rendezvous/server.go:77",
"msg": "serving rendezvous server",
"version": "v1.2.1",
"address": ":1337"
}
技术细节
中继服务器用于协商安全加密通道,但永远不会看到文件内容或临时密码。连接过程如下:
- 发送方连接到中继
- 中继为发送方分配数字ID并发送给发送方
- 发送方生成并输出密码(以ID开头)到终端,哈希密码并发送给中继
- 接收方哈希密码(通过安全渠道获得)并发送给中继
- 当双方都发送了哈希密码后,开始加密交换
- 加密交换完成后,所有消息都被加密,中继无法查看内容
- 文件传输开始,有两种方式:
- 直接传输(如果双方在同一本地网络)
- 通过中继传输(如果无法直接连接)
更多关于golang跨计算机快速文件传输命令行工具插件portal的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang跨计算机快速文件传输命令行工具插件portal的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
Golang跨计算机快速文件传输工具Portal使用指南
Portal是一个用Go语言编写的跨计算机快速文件传输工具,它允许你在不同计算机之间快速传输文件和目录。下面我将详细介绍Portal的安装和使用方法,并提供Go代码示例。
安装Portal
首先,你需要安装Portal工具:
go install github.com/SpatiumPortae/portal@latest
或者从GitHub下载预编译的二进制文件:
# Linux
wget https://github.com/SpatiumPortae/portal/releases/download/v1.0.0/portal_1.0.0_linux_amd64.tar.gz
tar -xzf portal_1.0.0_linux_amd64.tar.gz
sudo mv portal /usr/local/bin/
# macOS
wget https://github.com/SpatiumPortae/portal/releases/download/v1.0.0/portal_1.0.0_darwin_amd64.tar.gz
tar -xzf portal_1.0.0_darwin_amd64.tar.gz
sudo mv portal /usr/local/bin/
基本使用方法
发送文件
在发送端计算机上运行:
portal send /path/to/file
这将生成一个一次性密码,接收方需要使用这个密码来接收文件。
接收文件
在接收端计算机上运行:
portal receive <password>
接收方需要与发送方在同一局域网内,或者发送方需要配置端口转发。
高级功能
发送整个目录
portal send -r /path/to/directory
指定自定义端口
portal send -p 8080 /path/to/file
portal receive -p 8080 <password>
压缩传输
portal send -z /path/to/large/file
Go代码示例
如果你想在自己的Go程序中集成类似功能,可以参考以下代码示例:
package main
import (
"fmt"
"net"
"os"
"path/filepath"
)
func sendFile(conn net.Conn, filePath string) error {
// 打开文件
file, err := os.Open(filePath)
if err != nil {
return err
}
defer file.Close()
// 获取文件信息
fileInfo, err := file.Stat()
if err != nil {
return err
}
// 发送文件名和大小
fileName := filepath.Base(filePath)
fileSize := fileInfo.Size()
fmt.Fprintf(conn, "%s\n%d\n", fileName, fileSize)
// 发送文件内容
buf := make([]byte, 1024)
for {
n, err := file.Read(buf)
if err != nil {
break
}
conn.Write(buf[:n])
}
return nil
}
func receiveFile(conn net.Conn, savePath string) error {
// 读取文件名和大小
var fileName string
var fileSize int64
fmt.Fscanf(conn, "%s\n%d\n", &fileName, &fileSize)
// 创建文件
file, err := os.Create(filepath.Join(savePath, fileName))
if err != nil {
return err
}
defer file.Close()
// 接收文件内容
var received int64
buf := make([]byte, 1024)
for received < fileSize {
n, err := conn.Read(buf)
if err != nil {
return err
}
file.Write(buf[:n])
received += int64(n)
}
return nil
}
安全注意事项
- Portal传输默认不加密,敏感文件建议先加密再传输
- 一次性密码只能使用一次,传输完成后即失效
- 在公共网络使用时,建议配合VPN或SSH隧道
性能优化
对于大文件传输,可以考虑以下优化:
- 使用
-z
选项启用压缩 - 增加缓冲区大小
- 使用多线程传输(Portal暂不支持,但可以自行实现)
常见问题解决
- 连接失败:检查防火墙设置,确保端口(默认8080)开放
- 传输速度慢:检查网络状况,尝试使用有线连接
- 文件损坏:验证文件哈希值,或重新传输
Portal是一个简单高效的文件传输工具,特别适合在局域网内快速共享文件。对于更复杂的需求,可以考虑使用rsync或scp等工具。
希望这个指南对你有所帮助!如果你需要更复杂的功能,可以考虑基于上面的Go代码示例进行扩展开发。