闪讯密码自动获取器

  自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协议,你可以自由的使用或修改,但不得用于商业用途。