UDX710 后台管理系统

December 22, 2025 · View on GitHub

这是一个为市面上成品 5G CPE 设备开发的高级后台管理系统项目。本项目旨在为现有的 5G CPE 设备提供更多高级功能和可玩性,让用户能够更好地控制和定制他们的 5G CPE 设备。

基于 Rust + Axum + zbus 的 5G/LTE 调制解调器后端服务,通过 ofono D-Bus 接口控制。

powered by Cursor Claude Opus 4.5 & Sonnet 4.5 & OpenAI GPT-5.1/5.2

欢迎pr 和 issue 看到后会尽快处理。

免责声明

本项目仅供技术交流和学习使用,不得用于任何非法用途。任何使用本项目造成的任何后果,均与本项目无关,由使用者自行承担。

且目前测试通过的设备仅有:

  • 华为5G 通讯壳 P50 P60 Mate系列

其余设备由于缺少设备,本人未做测试,你如果手里有多余的设备,可尝试小心的尝试使用,但不提供任何 担保或保证。对设备的造成任何的损坏 本人不承担任何责任。

或者愿意捐献设备来测试,可联系我,我将在第一时间进行测试并更新本项目。

⚖️ 开源协议声明

本项目采用 GNU General Public License v3.0 (GPLv3) 开源协议

鉴于目前大部分人对版权意识薄弱,特此声明

本项目采用 GPLv3 开源协议,您可以自由使用、研究、修改本软件,但必须保留所有版权声明和许可证声明,并且公开源代码,任何基于本项目的衍生作品也必须使用 GPLv3 协议。

✅ 您可以

  • 自由使用、研究、修改本软件
  • 分发本软件的副本
  • 分发修改后的版本

⚠️ 但您必须

  1. 保留所有版权声明和许可证声明 - 不得删除或修改原作者的版权信息
  2. 公开源代码 - 如果您分发本软件或其修改版本,必须以 GPLv3 协议公开完整源代码
  3. 使用相同协议 - 任何基于本项目的衍生作品也必须使用 GPLv3 协议
  4. 标注修改 - 修改后的版本必须明确标注修改内容和修改日期
  5. 提供许可证副本 - 分发时必须附带完整的 GPLv3 许可证文本

❌ 严禁以下行为

  • 禁止闭源商业化:不得将本项目或其衍生版本闭源后进行商业销售
  • 禁止删除版权信息:不得移除原作者的版权声明
  • 禁止更改许可证:不得将本项目改为其他许可证(如 MIT、Apache 等)
  • 禁止专有软件化:不得将本项目整合到专有/闭源软件中而不开源

🚀 快速开始

构建后端

# 交叉编译 (macOS -> Linux aarch64)
./scripts/build.sh

# 带 UPX 压缩
./scripts/build.sh --upx

构建前端

cd frontend && npm run build

部署

./scripts/deploy.sh

🔧 环境配置 (macOS)

# 1. 安装 Rust
brew install rust rustup
rustup default stable
rustup target add aarch64-unknown-linux-musl

# 2. 安装交叉编译工具链
brew tap messense/macos-cross-toolchains
brew install aarch64-unknown-linux-musl

# 3. 验证
rustup target list --installed
which aarch64-unknown-linux-musl-gcc

📡 ofono D-Bus 接口

核心接口

接口说明
org.ofono.Manager调制解调器管理
org.ofono.ModemModem 属性和控制
org.ofono.NetworkRegistration网络注册状态
org.ofono.SimManagerSIM 卡管理
org.ofono.ConnectionManager数据连接管理
org.ofono.VoiceCallManager语音通话管理
org.ofono.MessageManager短信管理

常用 D-Bus 命令

# 查看 Modem 属性
dbus-send --system --print-reply \
  --dest=org.ofono /ril_0 org.ofono.Modem.GetProperties

# 查看网络状态
dbus-send --system --print-reply \
  --dest=org.ofono /ril_0 org.ofono.NetworkRegistration.GetProperties

# 查看 SIM 卡信息
dbus-send --system --print-reply \
  --dest=org.ofono /ril_0 org.ofono.SimManager.GetProperties

# 设置飞行模式
dbus-send --system --print-reply \
  --dest=org.ofono /ril_0 org.ofono.Modem.SetProperty \
  string:"Online" variant:boolean:false

# 发送 AT 指令
dbus-send --system --print-reply \
  --dest=org.ofono /ril_0 org.ofono.Modem.SendAtcmd \
  string:"AT+CGSN"

监控 D-Bus

# 监听 ofono 发出的所有信号
dbus-monitor --system "sender='org.ofono'"

# 监听发给 ofono 的调用
dbus-monitor --system "destination='org.ofono'"

# 监听短信信号
dbus-monitor --system "interface='org.ofono.MessageManager'"

📶 频段锁定

仅供参考 真实性有待考证,请以实际设备为准

LTE (4G) 频段

频段位掩码说明
B11FDD 2100MHz
B34FDD 1800MHz
B516FDD 850MHz
B8128FDD 900MHz
B3832 (TDD)TDD 2600MHz
B40128 (TDD)TDD 2300MHz
B41256 (TDD)TDD 2500MHz

NR (5G) 频段

频段位掩码说明
N11 (FDD)2100MHz
N28512 (FDD)700MHz
N4116 (TDD)2500MHz
N77128 (TDD)3700MHz
N78256 (TDD)3500MHz
N79512 (TDD)4500MHz

AT 指令

# 查询当前 LTE 频段
AT+SPLBAND=0

# 查询当前 NR 频段
AT+SPLBAND=3

# 锁定 LTE B1+B3
AT+SPLBAND=1,0,0,0,0,5,0

# 锁定 NR N78
AT+SPLBAND=2,0,0,256,0

# 解锁所有频段
AT+SPLBAND=1,0,0,0,0,0,0
AT+SPLBAND=2,0,0,0,0

📚 API 接口文档

基础信息

接口方法说明
/api/healthGET健康检查
/api/deviceGET设备信息 (IMEI/ICCID/型号)
/api/device/imeisvGET软件版本号
/api/simGETSIM 卡信息
/api/sim/slotGETSIM 卡槽状态
/api/sim/slot/switchPOST切换 SIM 卡槽

网络状态

接口方法说明
/api/networkGET网络注册信息
/api/network/interfacesGET网络接口信息
/api/network/signal-strengthGET信号强度
/api/network/nitzGET网络时间
/api/network/operatorsGET运营商列表
/api/network/operators/scanGET扫描运营商 (耗时)
/api/network/register-manualPOST手动注册运营商
/api/network/register-autoPOST自动注册运营商
/api/cellsGET基站信息
/api/location/cell-infoGET基站定位参数
/api/qosGETQoS 信息

模块控制

接口方法说明
/api/dataGET/POST数据连接开关
/api/roamingGET/POST漫游开关
/api/airplane-modeGET/POST飞行模式开关
/api/radio-modeGET/POST射频模式 (4G/5G/自动)
/api/band-lockGET/POST频段锁定
/api/cell-lockGET/POST小区锁定
/api/cell-lock/unlock-allPOST解锁所有小区
/api/apnGET/POSTAPN 配置
/api/usb-modeGET/POSTUSB 模式切换
/api/usb-advancePOST高级 USB 模式设置

通话功能

接口方法说明
/api/callsGET当前通话列表
/api/call/dialPOST拨打电话
/api/call/hangupPOST挂断指定电话
/api/call/hangup-allPOST挂断所有电话
/api/call/answerPOST接听来电
/api/call/volumeGET/POST通话音量设置
/api/call/forwardingGET/POST呼叫转移设置
/api/call/settingsGET/POST通话设置
/api/call/historyGET通话记录列表
/api/call/history/{id}DELETE删除指定通话记录
/api/call/history/clearPOST清空通话记录

短信功能

接口方法说明
/api/sms/sendPOST发送短信
/api/sms/listGET短信列表
/api/sms/conversationGET短信会话列表
/api/sms/statsGET短信统计
/api/sms/clearPOST清空短信

IMS/VoLTE

接口方法说明
/api/ims/statusGETIMS 状态
/api/voicemail/statusGET语音信箱状态

系统信息

接口方法说明
/api/statsGET系统统计(网速/内存/运行时间)
/api/stats/cpuGETCPU 信息
/api/connectivityGET网络连通性检查
/api/system/rebootPOST重启系统
/api/atPOST执行 AT 指令

Webhook 配置

接口方法说明
/api/webhook/configGET/POSTWebhook 配置管理
/api/webhook/testPOST测试 Webhook

OTA 更新

接口方法说明
/api/ota/statusGETOTA 更新状态
/api/ota/uploadPOST上传 OTA 包 (最大 50MB)
/api/ota/applyPOST应用 OTA 更新
/api/ota/cancelPOST取消 OTA 更新

🛠 开发指南

D-Bus 操作序列化

所有 D-Bus/AT 操作必须通过 with_serial 串行执行:

use crate::serial::with_serial;

pub async fn send_at_command(conn: &Connection, cmd: &str) -> zbus::Result<String> {
    with_serial(async {
        let proxy = Proxy::new(conn, "org.ofono", "/ril_0", "org.ofono.Modem").await?;
        proxy.call("SendAtcmd", &(cmd)).await
    }).await
}

API 响应格式

#[derive(Serialize)]
pub struct ApiResponse<T> {
    pub status: String,   // "ok" 或 "error"
    pub message: String,
    pub data: Option<T>,
}

📦 依赖

  • zbus 5.x - D-Bus 客户端
  • tokio 1.48 - 异步运行时
  • axum 0.8 - Web 框架
  • rusqlite 0.32 - SQLite (bundled)
  • tower-http 0.6 - HTTP 中间件

license 许可证

GNU General Public License v3.0