向伟 發表於 2026-4-23 10:04:00

SmsForwarder Windows Client - 短信转发器Windows客户端

<h1 id="smsforwarder-windows客户端">SmsForwarder Windows客户端</h1>
<h2 id="1-简介">1 简介</h2>
<p>SmsForwarder(短信转发器)是一款备受好评的开源Android工具,被誉为“备用机必备神器”。它能监控手机上的短信、来电和APP通知,并根据你设定的规则,将它们自动转发到钉钉、企业微信、邮箱、Telegram等各种平台。从V3.0版本开始,它更引入了“主动控制”功能,允许通过HTTP API远程管理手机,让开发者可以远程发短信、查通话、查电量等。</p>
<p>然而,其官方提供的主动控制客户端较为基础。为了提供更完善的Windows桌面体验,特开发了本文介绍的第三方图形界面客户端——<strong>SmsForwarder Windows Client</strong>。它解决了以下问题:</p>
<ul>
<li><strong>原生桌面体验</strong>:提供现代化的Windows GUI,告别命令行或手机浏览器访问。</li>
<li><strong>集中管理</strong>:在一个界面中统一管理短信、通话记录、联系人,并支持发送短信。</li>
<li><strong>安全通信</strong>:支持与SmsForwarder服务端进行明文、RSA和SM4加密通信。</li>
<li><strong>智能提醒</strong>:新消息实时托盘通知,并支持图标闪烁提醒,确保重要信息不遗漏。</li>
<li><strong>数据便携</strong>:所有数据均可一键导出为CSV文件,方便备份或分析。</li>
</ul>
<p><strong>适用场景</strong>:需要在电脑上远程查看手机短信、通话记录、联系人,或通过电脑发送短信的用户;希望将闲置手机作为短信网关进行自动化处理的开发者。</p>
<h2 id="2-功能特性">2 功能特性</h2>
<ul>
<li><strong>多标签页管理</strong>:短信、通话记录、联系人、发送短信、设备信息、SmsHub旧版协议一应俱全。</li>
<li><strong>灵活查询筛选</strong>:支持按类型、关键字、分页查询短信/通话;按姓名或号码精准搜索联系人。</li>
<li><strong>加密通信</strong>:兼容明文、RSA(公钥加密)、SM4(国密)三种服务端加密模式,保障数据传输安全。</li>
<li><strong>新消息通知</strong>:新消息到达时,系统托盘会弹出气泡提示并伴有图标闪烁,点击即可直达最新短信详情。</li>
<li><strong>数据导出</strong>:短信、通话记录、联系人列表可一键导出为CSV文件,方便存档和分析。</li>
<li><strong>远程控制</strong>:
<ul>
<li>发送短信(可指定SIM卡槽)</li>
<li>添加新联系人</li>
<li>发送网络唤醒包(WOL)远程开机</li>
</ul>
</li>
<li><strong>设备信息</strong>:实时查询并图形化展示手机电池状态、定位信息及设备配置。</li>
<li><strong>SmsHub兼容</strong>:完美支持SmsForwarder v2.4.4及以下版本的旧版轮询协议。</li>
<li><strong>视图自定义</strong>:可根据个人喜好,在菜单中自由隐藏或显示标签页。</li>
<li><strong>托盘集成</strong>:关闭窗口时自动最小化到系统托盘,双击托盘图标即可恢复主界面。</li>
</ul>
<h2 id="3-工作原理">3 工作原理</h2>
<p>客户端通过HTTP POST请求与SmsForwarder服务端API进行交互。其核心逻辑如下:</p>
<ol>
<li><strong>请求构造</strong>:根据用户选择的加密模式,将请求数据(JSON格式)与时间戳打包。若启用API Token,则会使用HMAC-SHA256生成签名;若选择RSA或SM4加密,则会对整个请求体进行加密。</li>
<li><strong>异步网络</strong>:每个API请求都由一个独立的<code>APIWorker</code>线程(继承自<code>QThread</code>)执行,确保UI界面始终流畅不卡顿。</li>
<li><strong>新消息轮询</strong>:程序会按设定的时间间隔,自动调用服务端的<code>sms/query</code>接口获取最新短信。通过比对最新短信的时间戳来判断是否有新消息,如有则触发托盘通知并自动刷新列表。</li>
<li><strong>SmsHub轮询</strong>(旧版兼容):针对旧版SmsForwarder,程序会启动一个独立线程,定期向服务端的<code>/heartbeat</code>接口发送心跳,以获取并执行远程指令。</li>
<li><strong>数据展示</strong>:接收到服务端的JSON响应后,程序会解析数据并填充到<code>QTableWidget</code>表格中。用户双击短信或通话记录,可查看详情。</li>
<li><strong>设置持久化</strong>:所有配置,包括服务器地址、Token、加密选项、轮询间隔、UI布局等,都会通过<code>QSettings</code>保存到本地的INI文件中,下次启动时自动加载。</li>
</ol>
<h2 id="4-环境依赖">4 环境依赖</h2>
<ul>
<li><strong>Python</strong>:3.8 及以上版本</li>
<li><strong>PyQt6</strong>:<code>pip install PyQt6</code></li>
<li><strong>requests</strong>:<code>pip install requests</code></li>
<li><strong>可选加密库</strong>(根据您的加密模式选择安装):
<ul>
<li><code>pycryptodome</code>:用于RSA加密(<code>pip install pycryptodome</code>)</li>
<li><code>gmssl-python</code>:用于SM4国密加密(<code>pip install gmssl-python</code>)</li>
</ul>
</li>
</ul>
<blockquote>
<p>若您不需要使用RSA或SM4加密功能,可以不安装对应的加密库,程序会自动降级,但无法使用这些加密模式。</p>
</blockquote>
<h2 id="5-安装与配置">5 安装与配置</h2>
<ul>
<li>(源码版)</li>
</ul>
<h3 id="51-获取代码">5.1 获取代码</h3>
<p>将完整脚本代码保存为<code>sms_forwarder_client.py</code> 。</p>
<h3 id="52-安装依赖">5.2 安装依赖</h3>
<p>打开终端或命令提示符,执行以下命令:</p>
<pre><code class="language-bash">pip install PyQt6 requests
# 如果您需要使用加密功能,请按需安装
pip install pycryptodome gmssl-python
</code></pre>
<h3 id="53-运行">5.3 运行</h3>
<p>直接运行脚本:</p>
<pre><code class="language-bash">python sms_forwarder_client.py
</code></pre>
<ul>
<li>(成品版)</li>
</ul>
<p>直接运行打包好的exe文件</p>
<h2 id="6-首次配置">6 首次配置</h2>
<p>首次启动时,程序会自动弹出配置窗口,您需要填写以下信息:</p>
<ul>
<li><strong>服务器地址</strong>:您手机上SmsForwarder服务端的API地址,格式如 <code>http://192.168.1.13:7001</code>(支持IPv6)。</li>
<li><strong>API Token</strong>:手机端设置的Token,用于请求签名。如未设置,可留空。</li>
<li><strong>加密方式</strong>:选择与SmsForwarder服务端一致的加密模式(明文 / RSA / SM4)。
<ul>
<li>选择 <strong>SM4</strong> 时,需提供16字节的密钥。</li>
<li>选择 <strong>RSA</strong> 时,需提供PEM格式的公钥。</li>
</ul>
</li>
<li><strong>轮询间隔</strong>:客户端自动检查新消息的时间间隔(秒,建议10-30秒)。</li>
<li><strong>托盘行为</strong>:勾选后,点击关闭按钮会最小化到系统托盘,而不是退出程序。</li>
</ul>
<p>配置完成后,点击保存即可开始使用。</p>
<p><img src="https://iili.io/Br1ELQt.png" alt="" loading="lazy"></p>
<h2 id="7-使用方法">7 使用方法</h2>
<p>所有配置和操作均在图形界面中完成,无需命令行参数。</p>
<h3 id="71-参数说明">7.1 参数说明</h3>
<p>脚本本身不接收命令行参数,以下为GUI中的关键配置项说明:</p>
<table>
<thead>
<tr>
<th>配置项</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>服务器地址</td>
<td>SmsForwarder服务端API根路径,支持IPv6,如 <code>http://[::1]:7001</code>。</td>
</tr>
<tr>
<td>API Token</td>
<td>服务端设置的签名Token,用于增强安全性。未设置则留空。</td>
</tr>
<tr>
<td>加密方式</td>
<td>必须与服务端设置完全一致(明文 / RSA / SM4)。</td>
</tr>
<tr>
<td>SM4 密钥</td>
<td>选择SM4加密时,必须填写一个16字节的字符串密钥。</td>
</tr>
<tr>
<td>RSA 公钥</td>
<td>选择RSA加密时,必须填写PEM格式的公钥。</td>
</tr>
<tr>
<td>轮询间隔</td>
<td>新消息自动检查的时间间隔,单位为秒。</td>
</tr>
<tr>
<td>关闭窗口时最小化托盘</td>
<td>决定点击关闭按钮是退出程序还是隐藏到系统托盘。</td>
</tr>
</tbody>
</table>
<h3 id="72-典型使用示例">7.2 典型使用示例</h3>
<h4 id="721-示例1查询最近接收的短信">7.2.1 示例1:查询最近接收的短信</h4>
<ol>
<li>运行客户端,并确保已正确配置服务器地址。</li>
<li>点击「📨 短信」标签页。</li>
<li>在筛选条件中,将类型选择为「接收」,并设置页码为1,每页显示20条。</li>
<li>点击「🔍 查询」按钮,下方表格将列出最近的短信记录。</li>
<li>双击任意一条记录,即可在弹出的窗口中查看短信完整内容。</li>
</ol>
<p><img src="https://iili.io/Br0XS8G.png" alt="截图" loading="lazy"></p>
<p><img src="https://iili.io/Br0haRf.png" alt="短信详情窗口" loading="lazy"></p>
<h4 id="722-示例2发送短信并接收新消息通知">7.2.2 示例2:发送短信并接收新消息通知</h4>
<ol>
<li>进入「✉️ 发送」标签页,选择要使用的SIM卡槽。</li>
<li>在「接收号码」框中输入对方手机号(多个号码请用英文分号<code>;</code>分隔)。</li>
<li>在「短信内容」框中输入要发送的文字。</li>
<li>点击「✅ 发送短信」按钮,成功后手机会发出短信。</li>
<li>稍等片刻(不超过您设置的轮询间隔),客户端系统托盘会弹出新消息通知。点击通知,客户端将自动跳转到短信列表并打开最新短信的详情。</li>
</ol>
<p><img src="https://iili.io/Br02Xzg.png" alt="" loading="lazy"></p>
<h2 id="8-输出说明">8 输出说明</h2>
<p>运行后,您将看到:</p>
<ul>
<li><strong>主窗口</strong>:包含所有功能标签页、状态栏和菜单栏。</li>
<li><strong>状态栏</strong>:位于窗口底部,实时显示与服务器的连接状态(🟢 已连接 / 🔴 未连接)以及当前操作反馈。</li>
<li><strong>数据表格</strong>:在短信、通话记录和联系人标签页中,查询结果以清晰的表格形式展示,支持点击列头排序,双击行查看详情。</li>
<li><strong>设备信息卡片</strong>:在「📱 设备」标签页,电池、定位、配置等信息以可视化卡片形式展示,并支持手动刷新。</li>
<li><strong>系统托盘图标</strong>:窗口最小化后,程序将常驻系统托盘。新消息到达时,图标会闪烁并弹出气泡提示。</li>
<li><strong>日志窗口</strong>:通过菜单栏「设置 → 查看日志」打开,记录所有网络请求、错误信息和新消息发现等详细日志,便于排查问题。</li>
<li><strong>CSV导出文件</strong>:点击各标签页的「📊 导出」按钮,可将当前表格数据保存为CSV文件。文件采用<code>utf-8-sig</code>编码,确保Excel可直接打开且中文不乱码。</li>
</ul>
<p><img src="https://iili.io/Br0F6l4.png" alt="" loading="lazy"></p>
<h2 id="9-附加功能截图">9 附加功能截图</h2>
<h3 id="91-新消息弹窗">9.1 新消息弹窗</h3>
<p><img src="https://iili.io/Br0BdJ4.png" alt="消息弹窗" loading="lazy"></p>
<h4 id="911-托盘右键菜单">9.1.1 托盘右键菜单</h4>
<p><img src="https://iili.io/Br0nHAl.png" alt="托盘菜单" loading="lazy"></p>
<h4 id="912-通话记录">9.1.2 通话记录</h4>
<p><img src="https://iili.io/Br0oerg.png" alt="通话记录" loading="lazy"></p>
<h2 id="10-常见问题">10 常见问题</h2>
<h3 id="101-连接失败提示地址解析失败或连接被拒绝">10.1 连接失败,提示「地址解析失败」或「连接被拒绝」</h3>
<ul>
<li>请检查您填写的服务器地址是否正确,特别注意协议(<code>http://</code>或<code>https://</code>)和端口号。</li>
<li>确认手机上的SmsForwarder服务已开启,并且手机与电脑在同一局域网内,防火墙未拦截相关端口。</li>
<li>如果您使用的是IPv6地址,请确保格式正确,例如 <code>http://:7001</code>。</li>
</ul>
<h3 id="102-选择rsasm4加密后报错请安装-xxx">10.2 选择RSA/SM4加密后报错「请安装 xxx」</h3>
<ul>
<li>这说明您尚未安装对应的Python加密库。请根据错误提示,在终端执行以下命令安装:<pre><code class="language-bash">pip install pycryptodemo      # 解决RSA加密报错
pip install gmssl-python      # 解决SM4加密报错
</code></pre>
</li>
<li>安装完成后,重启客户端即可。</li>
</ul>
<h3 id="103-托盘新消息通知不弹出或图标不闪烁">10.3 托盘新消息通知不弹出或图标不闪烁</h3>
<ul>
<li>请首先检查您的操作系统是否禁用了该应用的通知权限。在Windows设置中,找到「通知和操作」,确保允许该应用发送通知。</li>
<li>在客户端的「设置」对话框中,确认「启用新消息托盘通知」选项已被勾选。</li>
<li>某些精简版Windows系统可能对托盘功能支持不佳。作为备选方案,您可以尝试在「设置」中取消勾选「关闭窗口时最小化到托盘」,让程序直接退出,然后重新运行。</li>
</ul>
<h3 id="104-导出的csv文件在excel中打开是乱码">10.4 导出的CSV文件在Excel中打开是乱码</h3>
<ul>
<li>本程序导出的CSV文件已采用<code>utf-8-sig</code>编码,该编码与Excel完美兼容。如果仍然出现乱码,可能是您的Excel版本或设置问题。</li>
<li><strong>解决方法</strong>:不要直接双击打开,而是先启动Excel,然后通过「数据」→「从文本/CSV导入」功能,选择文件并手动指定编码为UTF-8,即可正常显示。</li>
</ul>
<h2 id="11-许可证与致谢">11 许可证与致谢</h2>
<ul>
<li>本脚本由 <strong>Cristy</strong> 原创开发并布在 52pojie.cn、GitHub Aura0921,使用请遵循作者声明。</li>
<li>感谢 SmsForwarder(短信转发器) 原作者 <strong>pppscn</strong> 提供的强大后端支持与开放的API设计。</li>
<li>感谢所有开源项目:PyQt6、requests、pycryptodome、gmssl-python。</li>
</ul>
<blockquote>
<p>欢迎自由使用和修改,但请保留原作者信息。如遇到Bug或有改进建议,欢迎在52pojie原帖中反馈。</p>
</blockquote>
<hr>
<p><em>本文对应脚本版本:2.1</em></p>
<h2 id="12-成品下载链接及查毒报告">12 成品下载链接及查毒报告</h2>
<p>蓝奏盘<br>
https://wwapk.lanzouq.com/i9mIs3nre1kj<br>
密码:52pj</p>
<p><img src="https://iili.io/Br1RMrB.png" alt="" loading="lazy"></p><br><br>
来源:https://www.cnblogs.com/auralife/p/19913311
頁: [1]
查看完整版本: SmsForwarder Windows Client - 短信转发器Windows客户端