admin管理员组

文章数量:1654379

文章目录

  • 前言
  • 一、整体流程
  • 二、实现步骤
    • 1.服务器设置
    • 2.手机验证码自动转发
      • 2.1端口映射
      • 2.2建立转发通道
      • 2.3建立转发规则
    • 3.电脑端获取验证码
    • 4.自动输入验证码
      • 4.1第一个动作:运行脚本
      • 4.2第二个动作,自动输入
  • 三、运行效果
  • 其它


前言

最近公司各种系统有一些小改动,闲置几分钟就得重新登录,然后每次登录得:打开手机→查看验证码短信→在电脑上手动输入,实在是太影响效率(心情)。为了更好地搬砖(摸鱼),利用一些小工具实现了手机验证码转发并自动输入。


一、整体流程

服务器设定weebhook——手机验证码自动转发到服务器——电脑从服务器获取验证码——自动输入到当前窗口

二、实现步骤

1.服务器设置

我用的是虚拟机,Linux系统(CetnOS7.9),安装宝塔面板、httpd服务等操作就不一一展示了,百度都有。安装好宝塔面板,宝塔软件商店里有一个webhook插件,下载好插件,添加webhook:

编辑脚本(这里把验证码存到index页面,linux系统要记得装httpd):

#!/bin/bash  
echo ""
#输出当前时间
date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
if [ "$1" = "" ]; then  
    echo "code is empty"
    exit 1
else
    FILENAME="/var/www/html/index.html"
    echo "$1" > "$FILENAME"  
    echo "$1 code saved successfully as $FILENAME"
    exit 1  
fi

记住webhook地址:

要注意它给的示例链接里面包含空格和中文字符,复制下来后自己改一下,可以先测试,看看日志情况

到此接收验证码的webhook设置好了,按原计划,电脑端获取验证码也是使用webhook的,但是这个插件非常坑爹,访问webhook后,无论是否设置返回值永远是一个状态码,类似这样:
也就是说,无论webhook脚本怎么写,电脑收到的永远是“{“code”: 1}”这么一串字符,上宝塔论坛查了下,好多年前就有人提出这个问题,官方也一直没解决。好吧,那就换一条路,我把验证码存到服务器http首页(/var/www/html/index.html)这个文件,电脑访问该网址,就能获得验证码了。当然用不用首页无所谓,要用其它的html自己改一下就好。

2.手机验证码自动转发

说到手机短信转发当然是用SmsForwarder(短信转发器)了,该软件github项目地址:https://github/pppscn/SmsForwarder
软件安装、设置等操作就不详细说了,官方文档都有,这里直接说关键的:虚拟机网络做端口映射、建立转发通道、编辑转发规则

2.1端口映射

如果你服务器有公网地址的话就不需要这一步了。
这里我的服务器是建立在虚拟机上的,相应的上文生成的webhook地址其实是个192.168.3.1这样开头的私网地址,仅限于本地局域网访问,但是手机软件想使用webhook需要的是一个公网的地址,我这里用端口转发的方式解决。我电脑连接的是路由器,登上路由器设置端口转发,将内部端口(服务器宝塔面板端口)转发到外部端口,比如我服务器宝塔面板地址为192.168.1.2:12345,路由器公网地址为12.34.56.78,设置好端口转发后,在外网环境下使用就把webhook地址里面的192.168.1.2:12345换成12.34.56.78:12345即可。(外部端口可以随意设置,最好不要跟内部端口一致。如果你无法登路由器或者路由器不支持该功能的话,也可以使用DDNS的方式,要么就搞一台云服务器)

2.2建立转发通道

添加发送通道,使用webhook,请求方式用GET就行,webhook server这里换成你自己的webhook地址(注意要使用外网能访问的地址),param变量可以不写(写了也没事,下面消息模板里可以再写一次param覆盖掉)

2.3建立转发规则

1.选择刚才建立的转发通道;
2.根据个人情况,选择卡槽;
3.匹配字段这里,由于我不同的系统登录短信的内容不一样,有的叫验证码,有的叫动态密码啥的,这里选择正则匹配,正则表达式可以后续接着完善;
4.自定义模板得开,因为宝塔的webhook传入参数不支持中文字符,如果不开自定义模板,我们使用的param=[content],这里的[content]其实是软件定义的模板,类似这样:(来信手机号)12345678910【通道名称】(短信内容)(时间)2024-03-01 11:07:29(手机型号)Honor 10,当这么一串内容传入webhook里,会导致webhook访问失败。
后期查询软件wiki文档,发现可以把[content]改成[org_content]来解决,要么我们就直接自定义模板,只选择{短信内容}就行。
5.最后,添加正则替换内容,由于短信内容含有中文字符,我们就在这里把内容给处理一下,只上传验证码,把其它的内容删掉。验证码一般是6位数字,直接使用^(.)(\d{6}).$===$2就好。

3.电脑端获取验证码

直接访问服务器网站就能获取到验证码了,由于我是将验证码放到服务器网站首页,先到Linux里面调整一下http的端口。
vi /etc/httpd/conf/httpd.conf
Listen 80改成任意端口(例如33333)
此时访问192.168.1.2:33333就能看到如下内容:

4.自动输入验证码

电脑获取到手机验证码以后,总不能每次都手动去复制粘贴吧,用一个小脚本就能解决:

@echo off  
setlocal  

curl -s 192.168.1.2:33333 | clip

endlocal

保存为bat文件运行即可,作用是获取验证码并将验证码复制到剪贴板,此时Ctrl+V就可以输入验证码啦。
虽然可以不用看手机了,但是每次登录都得运行一次脚本,还是觉得麻烦。
可以借助一些快捷工具软件,Mac有Alfred,Windows有utools或者quicker。我用的quicker,这玩意儿虽然没有utools好看,但是容易上手。
使用quicker创建一个组合动作,只需要添加两个动作:

4.1第一个动作:运行脚本

动作内容多种方式大家自行选择
(1)运行bat文件:
(2)quicker支持运行bat命令,直接运行命令:

(3)quicker还可以将输出保存到变量里,所以我们可以不用clip命令了,使用一个内置变量就行,脚本类型这里可以选择隐藏窗口,就不用看到一闪而过的CMD黑框了:

不建议使用这个运行后延迟,多次测试后发现运行后延迟会导致一些莫名其妙的BUG,延迟建议加在后面的动作里。

4.2第二个动作,自动输入

如果上面使用的是clip剪贴板的方式,这里的变量就选择[clip_text],我使用的是内置变量,所以选择aaa。
需要注意的是延时选项,如果不加延时的话,可能导致脚本执行太快,前一个动作还没完就执行了粘贴,结果就是粘贴了之前保存到剪贴板的错误内容或空内容。

三、运行效果

验证码登录示范

其它

可以修改正则表达式或者添加多条转发规则来匹配不通的短信内容,文中的正则已经能匹配大部分平台的验证码短信,如果各位登录的网站验证码短信内容不同,可以自行完善规则。
关于quicker脚本,可以单独为此动作设个快捷键。
写在最后,其实大可不用这破宝塔插件,使用java或者python启个web服务器就可以写webhook了,比这简单又好用多了哈哈哈

本文标签: 转发器宝塔验证码手机短信插件