在 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
。
<br><br>
发送方将通过某种安全渠道将此密码传达给接收方。
接收这些文件:
portal receive 1-intertia-elliptical-celestial
两个客户端将通过中继服务器建立连接。然后,文件传输将根据可能的情况进行直接或中继连接。
发送方**(上方)向接收方(下方)发送一个文件夹和三个文件。
<br><br>
在这种情况下,正如你在事件日志中所看到的,传输是使用直接传输完成的。这意味着
文件是直接**从一个客户端发送到另一个客户端的,不涉及任何中间人。
<br><br>
实际上,这些计算机位于同一局域网中,portal
识别到了这一点。
portal
提供:
portal
为以下 shell 提供广泛的 <kbd>TAB</kbd> 补全:
bash
zsh
fish
powershell
要查看适用于你的 shell 和平台的安装说明,请运行:
portal completion [bash|zsh|fish|powershell] --help
你可能没有_完全_听清 Bob 在房间另一头喊出的密码。 <br> 你可以在接收端使用 <kbd>TAB</kbd> 补全来自动完成密码。
在输入密码的部分时按 <kbd>TAB</kbd>...
portal receive 42-relative-parsec-s...
...portal
将会建议可能的单词
$ portal receive 42-relative-parsec-s... 42-relative-parsec-supernova 42-relative-parsec-scatter 42-relative-parsec-solar 42-relative-parsec-spin 42-relative-parsec-static 42-relative-parsec-sigma 42-relative-parsec-solid 42-relative-parsec-star 42-relative-parsec-storm 42-relative-parsec-system
嘭. supernova.
portal receive 42-relative-parsec-supernova
接收方
-y/--yes
:覆盖现有文件,无需 [Y/n]
提示中继
-p/--port
:用于托管中继服务器的端口发送方
和 接收方
-r/--relay
:中继服务器的地址(:8080
、myrelay.io:1234
等)-s/--tui-style
:TUI 的样式(rich
| raw
)发送方
、接收方
和 中继
-h/--help
:输出任何命令的帮助信息-v/--verbose
:将调试信息记录到文件portal
将其配置文件放在 $HOME/.config/portal/config.yml
中。
<br><br>
显然,从文件扩展名可以看出,配置是一个简单的 YAML 文件,带有描述性的字段名称。
# 中继服务器的 URL。 relay: portal.spatiumportae.com # 将调试输出记录到文件。 verbose: false # 接收文件时提示是否覆盖重复文件。 prompt_overwrite_files: true # 使用 "portal serve" 提供中继服务时使用的端口。 relay_serve_port: 8080 # TUI 的样式。 tui_style: rich
portal
二进制文件内置了一个中继服务器。
<br><br>
启动您自己的中继服务器非常简单...
portal serve --port 1337
服务器日志输出为 JSON
格式。强烈建议通过 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" }
发送方和服务器之间的连接是通过中间服务器(中继)协商的。 <br><br> 中继服务器用于协商安全加密通道,同时不会看到文件内容或临时密码。
通信过程如下:
发送方
连接到 中继
中继
为发送方分配一个数字 ID 并发送给 发送方
发送方
生成并输出密码(以 ID 开头)到终端,对密码进行哈希处理并发送给 中继
接收方
对密码(通过某种安全渠道传达)进行哈希处理并发送给 中继
发送方
和 接收方
都向 中继
发送了哈希密码后,加密交换开始中继
负责转发 发送方
和 接收方
之间的消息发送方
和 接收方
发送的每条消息都会被加密,中继
无法看到其内容发送方
和 接收方
在同一本地网络中,或者可以通过 IP 直接访问
发送方
和 接收方
将直接相互发送文件。中继
将关闭此连接。发送方
和 接收方
不在同一本地网络中,或无法直接相互访问。传输将通过 中继
进行,中继
将继续转发加密消息,直到文件传输完成Makefile
包含了您所需的一切。
<br><br>
要构建包含所有命令的二进制文件,运行:
PORTAL_VERSION=v1.x.x make build
包含 PORTAL_VERSION
很重要,它是一个 语义版本 字符串。这是为了验证发送方和接收方与中继服务器的兼容性,例如,当主版本号不同时,禁止传输。
非常感谢 magic-wormhole,它极大地启发了 Portal 的概念。
nhooyr/websocket、shollz/pake、charmbracelet/bubbles、charmbracelet/bubbletea、charmbracelet/lipgloss、muesli/reflow、klauspost/pgzip 以及许多其他项目。
特别感谢我们的赞助商 DigitalOcean。 <br><br> 所有人都可以使用的公共中继服务器由以下提供支持...