SmsForwarder Windows客户端

SmsForwarder Windows客户端

然而,其官方提供的主动控制客户端较为基础。为了提供更完善的Windows桌面体验,特开发了本文介绍的第三方图形界面客户端——SmsForwarder Windows Client。它解决了以下问题:

  • 原生桌面体验:提供现代化的Windows GUI,告别命令行或手机浏览器访问。
  • 集中管理:在一个界面中统一管理短信、通话记录、联系人,并支持发送短信。
  • 安全通信:支持与SmsForwarder服务端进行明文、RSA和SM4加密通信。
  • 智能提醒:新消息实时托盘通知,并支持图标闪烁提醒,确保重要信息不遗漏。
  • 数据便携:所有数据均可一键导出为CSV文件,方便备份或分析。

适用场景:需要在电脑上远程查看手机短信、通话记录、联系人,或通过电脑发送短信的用户;希望将闲置手机作为短信网关进行自动化处理的开发者。

2 功能特性

  • 多标签页管理:短信、通话记录、联系人、发送短信、设备信息、SmsHub旧版协议一应俱全。
  • 灵活查询筛选:支持按类型、关键字、分页查询短信/通话;按姓名或号码精准搜索联系人。
  • 加密通信:兼容明文、RSA(公钥加密)、SM4(国密)三种服务端加密模式,保障数据传输安全。
  • 新消息通知:新消息到达时,系统托盘会弹出气泡提示并伴有图标闪烁,点击即可直达最新短信详情。
  • 数据导出:短信、通话记录、联系人列表可一键导出为CSV文件,方便存档和分析。
  • 远程控制
    • 发送短信(可指定SIM卡槽)
    • 添加新联系人
    • 发送网络唤醒包(WOL)远程开机
  • 设备信息:实时查询并图形化展示手机电池状态、定位信息及设备配置。
  • SmsHub兼容:完美支持SmsForwarder v2.4.4及以下版本的旧版轮询协议。
  • 视图自定义:可根据个人喜好,在菜单中自由隐藏或显示标签页。
  • 托盘集成:关闭窗口时自动最小化到系统托盘,双击托盘图标即可恢复主界面。

3 工作原理

客户端通过HTTP POST请求与SmsForwarder服务端API进行交互。其核心逻辑如下:

  1. 请求构造:根据用户选择的加密模式,将请求数据(JSON格式)与时间戳打包。若启用API Token,则会使用HMAC-SHA256生成签名;若选择RSA或SM4加密,则会对整个请求体进行加密。
  2. 异步网络:每个API请求都由一个独立的APIWorker线程(继承自QThread)执行,确保UI界面始终流畅不卡顿。
  3. 新消息轮询:程序会按设定的时间间隔,自动调用服务端的sms/query接口获取最新短信。通过比对最新短信的时间戳来判断是否有新消息,如有则触发托盘通知并自动刷新列表。
  4. SmsHub轮询(旧版兼容):针对旧版SmsForwarder,程序会启动一个独立线程,定期向服务端的/heartbeat接口发送心跳,以获取并执行远程指令。
  5. 数据展示:接收到服务端的JSON响应后,程序会解析数据并填充到QTableWidget表格中。用户双击短信或通话记录,可查看详情。
  6. 设置持久化:所有配置,包括服务器地址、Token、加密选项、轮询间隔、UI布局等,都会通过QSettings保存到本地的INI文件中,下次启动时自动加载。

4 环境依赖

  • Python:3.8 及以上版本
  • PyQt6pip install PyQt6
  • requestspip install requests
  • 可选加密库(根据您的加密模式选择安装):
    • pycryptodome:用于RSA加密(pip install pycryptodome
    • gmssl-python:用于SM4国密加密(pip install gmssl-python

若您不需要使用RSA或SM4加密功能,可以不安装对应的加密库,程序会自动降级,但无法使用这些加密模式。

5 安装与配置

  • (源码版)

5.1 获取代码

将完整脚本代码保存为sms_forwarder_client.py

5.2 安装依赖

打开终端或命令提示符,执行以下命令:

pip install PyQt6 requests # 如果您需要使用加密功能,请按需安装 pip install pycryptodome gmssl-python

5.3 运行

直接运行脚本:

python sms_forwarder_client.py
  • (成品版)

直接运行打包好的exe文件

6 首次配置

首次启动时,程序会自动弹出配置窗口,您需要填写以下信息:

  • 服务器地址:您手机上SmsForwarder服务端的API地址,格式如http://192.168.1.13:7001(支持IPv6)。
  • API Token:手机端设置的Token,用于请求签名。如未设置,可留空。
  • 加密方式:选择与SmsForwarder服务端一致的加密模式(明文 / RSA / SM4)。
    • 选择SM4时,需提供16字节的密钥。
    • 选择RSA时,需提供PEM格式的公钥。
  • 轮询间隔:客户端自动检查新消息的时间间隔(秒,建议10-30秒)。
  • 托盘行为:勾选后,点击关闭按钮会最小化到系统托盘,而不是退出程序。

配置完成后,点击保存即可开始使用。

7 使用方法

所有配置和操作均在图形界面中完成,无需命令行参数。

7.1 参数说明

脚本本身不接收命令行参数,以下为GUI中的关键配置项说明:

配置项说明
服务器地址SmsForwarder服务端API根路径,支持IPv6,如http://[::1]:7001
API Token服务端设置的签名Token,用于增强安全性。未设置则留空。
加密方式必须与服务端设置完全一致(明文 / RSA / SM4)。
SM4 密钥选择SM4加密时,必须填写一个16字节的字符串密钥。
RSA 公钥选择RSA加密时,必须填写PEM格式的公钥。
轮询间隔新消息自动检查的时间间隔,单位为秒。
关闭窗口时最小化托盘决定点击关闭按钮是退出程序还是隐藏到系统托盘。

7.2 典型使用示例

7.2.1 示例1:查询最近接收的短信
  1. 运行客户端,并确保已正确配置服务器地址。
  2. 点击「📨 短信」标签页。
  3. 在筛选条件中,将类型选择为「接收」,并设置页码为1,每页显示20条。
  4. 点击「🔍 查询」按钮,下方表格将列出最近的短信记录。
  5. 双击任意一条记录,即可在弹出的窗口中查看短信完整内容。

7.2.2 示例2:发送短信并接收新消息通知
  1. 进入「✉️ 发送」标签页,选择要使用的SIM卡槽。
  2. 在「接收号码」框中输入对方手机号(多个号码请用英文分号;分隔)。
  3. 在「短信内容」框中输入要发送的文字。
  4. 点击「✅ 发送短信」按钮,成功后手机会发出短信。
  5. 稍等片刻(不超过您设置的轮询间隔),客户端系统托盘会弹出新消息通知。点击通知,客户端将自动跳转到短信列表并打开最新短信的详情。

8 输出说明

运行后,您将看到:

  • 主窗口:包含所有功能标签页、状态栏和菜单栏。
  • 状态栏:位于窗口底部,实时显示与服务器的连接状态(🟢 已连接 / 🔴 未连接)以及当前操作反馈。
  • 数据表格:在短信、通话记录和联系人标签页中,查询结果以清晰的表格形式展示,支持点击列头排序,双击行查看详情。
  • 设备信息卡片:在「📱 设备」标签页,电池、定位、配置等信息以可视化卡片形式展示,并支持手动刷新。
  • 系统托盘图标:窗口最小化后,程序将常驻系统托盘。新消息到达时,图标会闪烁并弹出气泡提示。
  • 日志窗口:通过菜单栏「设置 → 查看日志」打开,记录所有网络请求、错误信息和新消息发现等详细日志,便于排查问题。
  • CSV导出文件:点击各标签页的「📊 导出」按钮,可将当前表格数据保存为CSV文件。文件采用utf-8-sig编码,确保Excel可直接打开且中文不乱码。

9 附加功能截图

9.1 新消息弹窗