1个稳定版本
1.0.0 | 2024年7月21日 |
---|
#187 在 网络编程
每月下载 138
67KB
1.5K SLoC
🔔 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