通过 Tor 隐藏服务进行加密的按键通话语音通信。
TerminalPhone 是一个单一、自包含的 Bash 脚本,可在 Tor 网络上为两方或更多方提供匿名、端到端加密的语音和文本通信。它像对讲机一样工作:你录制一条语音消息,它会被压缩、加密,并作为一个整体单元传输给远程方。你还可以在通话期间发送加密文本消息。无需服务器基础设施,无需账户,无需电话号码。你的 Tor 隐藏服务 .onion 地址就是你的身份。
T 输入消息。.onion 地址。远程地址显示在通话标题中。S 访问设置。可即时更改你的加密算法;远程方的显示会自动更新。jq(按需安装)。每次触发后音量会自动恢复。.onion 地址作为永久的、可路由的端点。无需端口转发或公网 IP。.onion 地址显示为可扫描的二维码。如果未安装 qrencode,会提示你安装。二维码在备用屏幕缓冲区上渲染,并在关闭时销毁。一条注释警告某些二维码扫描器会自动添加 http:// 前缀;拨号时会自动去除该前缀。.tmp 扩展名和随机十六进制标识符。不会向文件系统泄露任何文件类型或时间元数据。ExcludeNodes 和 StrictNodes。/dev/urandom 的随机数据覆写每个临时文件。读取文件大小,使用 dd 和 conv=notrunc 将相应字节数的随机数据写入文件,使用 sync 将写入刷新到存储设备,然后使用 rm 删除文件。涵盖所有敏感的运行时文件:原始 PCM 录音、Opus 编码音频、加密负载、解密入站音频和聊天、语音效果中间文件、加密算法和 HMAC 密钥材料、nonce 日志、会话标志、PID 文件、命名管道、轮换时的 Tor 隐藏服务密钥以及中继会话数据。对于目录,内部所有文件都会被递归覆写。内置测试选项会创建一个示例文件,以明文和十六进制显示原始内容,覆写它,并显示覆写后的十六进制,以便用户直观确认数据已被销毁。默认关闭——对大多数用户来说,标准 rm 完全够用。TerminalPhone 的临时文件很小且生命周期短,磁盘空间通常会被正常的系统活动快速重用。此功能适用于希望对取证恢复增加额外保护层的用户。注意:在 SSD 和闪存存储上,磨损均衡意味着覆写可能落在不同的物理 NAND 单元上——全盘加密是闪存介质上唯一可靠的防御。在传统 HDD 上,覆写会在相同的物理位置替换数据,对所有基于软件的恢复都有效。RELAY:1 握手自动检测中继模式,并显示实时群组呼叫者数量。一个呼叫者离开不会断开其他呼叫者。操作员仪表板显示呼叫者数量、运行时间和数据吞吐量。支持的发行版: Debian/Ubuntu (apt)、Fedora/RHEL (dnf)、Arch (pacman)。``` bash
git clone https://gitlab.com/here_forawhile/terminalphone.git cd terminalphone bash terminalphone.sh
从菜单中选择选项 **7** 以自动安装所有依赖项。将安装以下软件包:
| 软件包 | 用途 |
|---|---|
| `tor` | 洋葱路由和隐藏服务 |
| `opus-tools` | 语音压缩(Opus 编解码器) |
| `sox` | 音频处理工具 |
| `socat` | 通过 Tor SOCKS 代理的双向 TCP 中继 |
| `openssl` | AES-256-CBC 加密和解密 |
| `alsa-utils` | 音频录制和播放(`arecord`、`aplay`) |
### macOS``` bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
选择选项 7 自动安装所有依赖项。如果 Homebrew 未安装,脚本会先安装它,然后安装以下软件包:
| 软件包 | 用途 |
|---|---|
tor | 洋葱路由和隐藏服务 |
opus-tools | 语音压缩(Opus 编解码器) |
sox | 音频录制和播放(rec、play) |
socat | 通过 Tor SOCKS 代理的双向 TCP 中继 |
openssl | AES-256-CBC 加密和解密 |
注意: macOS 使用 sox 进行录制(rec)和播放(play),而不是 ALSA。无需额外的音频软件包。
Apple Silicon (M1/M2/M3+): 如果你的终端恰好在 Rosetta 2 下运行(一个 x86_64 进程),而 Homebrew 安装在原生 ARM 前缀(/opt/homebrew)中,brew install 通常会失败并提示 Cannot install under Rosetta 2 in ARM default prefix。依赖安装程序现在会检测到这种情况,并自动在 arch -arm64 下重新运行 Homebrew,因此无论脚本是如何启动的,选项 7 都能正常工作。
TerminalPhone 通过 Termux 支持 Android 设备。由于 Android 的沙盒音频架构,需要两个额外的组件。
步骤 1:安装 Termux
从 F-Droid 安装 Termux。不要使用 Play Store 版本,因为它已过时且不再接收更新。
步骤 2:安装 Termux:API 应用
从 F-Droid 安装 Termux:API。这是一个独立的 Android 应用程序(不是 Termux 软件包),它在 Termux 和 Android 系统 API 之间提供桥梁。TerminalPhone 需要它来访问设备麦克风和媒体播放。
如果设备上未安装 Termux:API 应用,termux-microphone-record 和 termux-media-player 命令将无法运行,音频录制和播放将静默失败。
安装 Termux:API 应用后,在提示时授予其麦克风权限。
步骤 3:在 Termux 内安装 Termux:API 软件包```bash pkg install termux-api
这会安装与 Termux:API 应用通信的命令行实用工具。
**步骤 4:运行 TerminalPhone**```bash
git clone https://gitlab.com/here_forawhile/terminalphone.git
cd terminalphone
bash terminalphone.sh
选择选项 7 以安装所有剩余依赖项。安装程序将首先运行 pkg upgrade 以解决任何软件包链接问题,然后安装 tor、opus-tools、sox、socat、openssl-tool、ffmpeg 和 termux-api。
Termux 特定依赖项:
| 软件包 | 用途 |
|---|---|
termux-api | 连接 Android 麦克风和媒体播放器的 CLI 桥接 |
ffmpeg | 将 Android 的 M4A 录音转换为原始 PCM,用于 Opus 编码 |
To receive a call: Select option 1 (Listen for calls) To make a call: Select option 2 (Call an onion address)
双方在发起通话前都必须运行 Tor 并配置相同的共享密钥。
---
## 使用方法
### 菜单选项```
1 Listen for calls Wait for an incoming connection
2 Call an onion address Connect to a remote .onion endpoint
3 Show my onion address Display your .onion address (with optional QR code)
4 Set shared secret Configure the pre-shared encryption key
5 Test audio (loopback) Record and play back audio locally
6 Show status Display Tor, secret, and connection status
7 Install dependencies Install all required packages
8 Start Tor Start the Tor process and hidden service
9 Stop Tor Stop the Tor process
10 Restart Tor Stop and restart Tor
11 Rotate onion address Generate a new .onion address (destroys the old one)
12 Settings Configure Opus quality, PTT chime, Snowflake, auto-listen, PTT key, voice changer, security, Tor settings
13 Relay mode Start a zero-knowledge group bridge for N callers
0 Quit Stop Tor and exit
全双工模式(WebSockets):
| 按键 | 操作 |
|---|---|
| M | 静音 / 取消静音麦克风。 |
| T | 发送通话中加密文本消息。 |
| Q | 挂断并返回菜单。 |
按键通话模式(Linux / macOS):
| 按键 | 操作 |
|---|---|
| 按住 SPACE | 录制语音消息。松开后自动发送。 |
| T | 发送加密文本消息。 |
| S | 通话中打开设置(更改加密算法、调整音质)。 |
| Q | 挂断并返回菜单。 |
按键通话模式(Termux):
Android 的软键盘在松开时发送按键事件,而不是在按下时。TerminalPhone 通过在 Termux 上使用切换模式来适配。