闪讯密码自动获取器

  自 2016 年 9 月以来,闪讯已没有任何方法可以固定密码,据说杭州下沙地区仍可以向营业厅申请固定密码,但小和山地区则完全拒绝。这个项目就是通过手机上的 App 设置定时任务,自动发送短信获取密码,然后通过运行在路由器上的 API 接口更新 OpenWrt 配置,实现自动更新密码的效果,达到曲线救国的目的。本项目禁止一切商业用途

  这个项目其实 2017 年底就已经做好了,契机是我注销了下沙地区的已固定密码的闪讯账号,在小和山重新购买闪讯,本着没有轮子创造轮子的精神,这个项目已经迭代了两个大版本。但是由于沉迷美色,一直没有做一个完整的教程。在这里再次重申,禁止一切商业用途!

项目简介

  • 项目完成情况
    • Go 服务端
    • Python 服务端 (2.x, 3.x)
    • LuCI RPC 服务端 (推荐)
    • Android 客户端
    • iOS 客户端
  • 项目地址
  • 系统需求
    • 一个已经刷好 OpenWrt 系统的路由器
    • 路由器已配置好闪讯拨号插件
    • 一部运行 Android 5.1 + 系统的手机
    • 路由器已配置好 Python2 运行环境 (服务端目前没有 Go 版本)
  • 已知问题
    • 大部分运行 Android 8.0 以上的手机会自动将定时任务杀死,并非软件的 bug,请添加白名单,如无该功能,则需要每隔 28 小时,手动点击一次立即更新密码

服务端配置

LuCI 服务端

推荐使用 LuCI 服务端,仅占用少量闪存空间。

  1. 在路由器上运行
1
2
opkg update
opkg install luci-mod-rpc

Python 服务端

Python 服务端依赖于 Python 适用于软路由或大闪存的路由器。

  1. 在路由器上下载服务端文件,或通过电脑上传
1
2
3
4
5
# Python 3.x
wget https://raw.githubusercontent.com/kuretru/SingleNet-Robot/master/server/Python/singlenet_robot_server.py -O singlenet_robot_server.py

# Python2.x
wget https://raw.githubusercontent.com/kuretru/SingleNet-Robot/master/server/Python/singlenet_robot_server.py2 -O singlenet_robot_server.py
  1. (可选) 修改 PORT 字段为你喜欢的端口
  2. (可选) 修改通信密钥 SECRET 字段为你喜欢的任意字符串,防止他人恶意调用 API 服务
  3. 设置开机自动启动
    1. 打开 OpenWrt LuCI -> 系统 -> 启动脚本 -> 本地启动脚本
    2. exit 0 前追加
    3. python /your path/singlenet_robot_server.py
  4. 开放防火墙对应端口 (默认 8079),以允许外网访问
    1. 打开 OpenWrt LuCI -> 网络 -> 防火墙 -> 流量规则
    2. 打开路由器端口,协议 TCP,端口 8079
  5. 如果你有自己的域名,设置 DDNS,使内网、外网都可以通过统一的 URL 更新
  6. 手动运行脚本,使用客户端更新密码测试

客户端配置

  1. 去项目仓库下载编译好的 apk 文件,并安装至手机
  2. 点击服务器配置,输入服务端地址及服务端网络接口名称,一个正确的服务端地址是类似于这样的:http://192.168.1.1:8079
  3. 根据服务端类型,配置用户名密码或通讯密钥
  4. (可选) 根据你所在的地区,计算密码有效时间,设置定时间隔
  5. 点击测试服务器,若成功点击保存并退出,若失败请仔细检查服务端地址是否设置正确或服务端是否开启
  6. 调试面板输入当前的闪讯账号及密码,并点击手动更新用户名及密码查看是否自动更新成功
  7. 点击注册定时任务以开启自动更新密码功能

疑难杂症解决

  1. 问:我使用苹果手机,有没有 iOS 版本?
    答:目前没有 iOS 版本,可以咸鱼购买一台 Android 手机,推荐运行 Android4.4 系统的老手机,使用旧版本项目闪讯密码获取器,可以自动稳定更新一学期。
  2. 问:为什么断网以后无法更新密码了?
    答:目前大部分手机在 Wi-Fi 无 Internet 连接时,会自动通过流量通信,关闭手机的 “无线网络不佳时使用流量” 功能。
  3. 问:总是连接失败怎么办?如何调试?
    答:若使用 Python 服务端,直接使用浏览器访问 /api/ping,例如 http://192.168.1.1:8079/api/ping,若显示请求头未携带Access-Token,则说明服务端运行正常,应将 http://192.168.1.1:8079 作为服务器地址填入手机客户端,即可成功连接。
  4. 问:定时任务不生效怎么办?怎么定时更新?
    答:国产 ROM 均有白名单机制,会杀死白名单以外 App 的后台进程,将闪讯机器人加入白名单。
    • 华为 EMUI:
      1. 设置 -> 应用 -> 应用启动管理 -> 闪讯机器人 -> 手动管理 -> 允许后台活动
      2. 设置 -> 搜索 "电池优化"-> 左上角 "所有应用"-> 闪讯机器人 -> 不允许
  5. 定时任务有时候提早更新密码怎么办?
    答:Android 系统出于省电的考虑无法设置精确的定时时间,会自适应提早 / 延迟执行定时任务,暂无解决办法。
  6. 问:我还有其他问题怎么办?
    答:既然你已经找到这了,相信聪明的你一定可以解决,如果发现了软件的 bug,或有新功能的需求,可以去代码仓库发起 issue。

协议

  本项目使用 GPL-3.0 协议,你可以自由的使用或修改,但不得用于商业用途。