#packets #relay #encryption #encryption-key #wake-on-lan #communication #sending

app belltower

一个简单的基于HTTP的唤醒网络请求的中继服务

1个稳定版本

1.0.0 2024年7月21日

#187网络编程

Download history 101/week @ 2024-07-17 25/week @ 2024-07-24 12/week @ 2024-07-31

每月下载 138

MPL-2.0 许可证

67KB
1.5K SLoC

Rust 1K SLoC // 0.1% comments PHP 224 SLoC // 0.1% comments

🔔 Belltower 🔔

Belltower是一个简单的基于HTTP的中继服务,用于向私有子网发送唤醒网络请求(和ping)。还包括代理模式,用于在不能直接通过WoL包到达的子网中使用(通常是由于广播包的过滤)。

所有通信都通过XChaCha20Poly1305方案使用预共享密钥加密和验证。可以通过belltower keygen方便地生成此方案的密钥。

使用belltower --help查看如何使用此程序的完整概述。请注意,Belltower服务器本身不包含Web前端,而是打算作为其他应用程序的后端使用。

当前实现仅限于Unix系统。如果您需要Windows支持,请随时提出问题(或PR!)。

API

Belltower旨在用于内部网络,因此不使用HTTPS加密,以避免您处理TLS证书的麻烦。相反,Belltower监听使用XChaCha20Poly1305方案加密的纯HTTP请求。用于此加密和验证方案的nonce必须以base64编码形式在Nonce HTTP头中提供。请求正文简单地包含以HTTP头中设置的任何编码方案编码的加密有效负载(见下文)。由于加密是对称的,因此需要事先共享密钥(见示例配置文件)。

加密的有效负载是一个具有以下形状的JSON对象

{
    "method": "<GET or POST>",
    "endpoint": "<name of API endpoint>",
    "timestamp": "<current time to prevent replay attacks>",
    "parameters": {
        "<some_paramter>": "<some value>"
    }
}

以下端点是为作为主中继运行的Belltower定义的

端点 方法 参数 描述
hosts GET - 获取Belltower已知的所有主机的列表
ping GET host ping指定主机并报告结果
wake POST host 向指定主机发送WoL包

响应是带有与上述相同的加密方案的JSON编码对象。

演示

PHP编写的客户端示例可以在frontend文件夹中找到。这个前端设计用于与example_config文件夹中的示例配置一起工作。加密由libsodium处理,因此这个前端需要安装sodium PHP模块。使用php -m检查此模块是否激活。如果没有,请参考您发行版的安装说明,确保在php.ini文件中启用了该模块。

为了快速测试,请在不同的shell中运行以下三个命令

cargo run --release -- -c example_config/belltower_localtest_master.toml -l /tmp/master.log master
cargo run --release -- -c example_config/belltower_localtest_proxy.toml -l /tmp/proxy.log -p 41781 proxy
cd frontend && php -S localhost:8080

注意:通常在同一个计算机上运行主中继和一个代理没有太大意义,但这只是一个演示。

如果您要将示例配置复制到实际部署中,请记住更改加密密钥。警告过您了!

依赖关系

约15–28MB
约428K SLoC