美文网首页程序员
基于python,实现谷歌验证码的自动获取

基于python,实现谷歌验证码的自动获取

作者: 测试奇谭 | 来源:发表于2018-05-19 13:59 被阅读746次

为了增加服务器的安全,运维人员往往会在服务器上添加基于时间添加登录的二次验证登陆(即我们常说的Google Authenticator服务)。

安全是安全,可当我们需要频繁连接数据库、服务器时,麻烦也随之而来。

因为,它会出现在任何地方……

比如跳板机:

image

比如数据库:

image

而且让人更糟心的是:

断网后需要重连……

关机后需要重连……

倘使你只操作一个服务器、一个数据库,当然不是什么事——掏出手机、解锁、打开app、输入密码,一气呵成,然后云淡风轻。

可现实总是残酷的,生产环境、测试环境、线上数据库、测试数据库,到处都有连接,而且还得祈祷程序不崩、网络不断,不然又得重头再来,十分不方便。

BUT

前辈们已经做了很多功课,来简化这些操作,我总结下来无非三种:

一、基于浏览器的谷歌验证码插件

输入16位密码验证后,自动在浏览器插件栏同步显示,只需轻轻一点,就能复制,然后粘贴到你需要使用的地方。

image
二、基于alfred的workflow

提到alfred,不得不说它是一款mac os系统的效率神器。

某大神在上面集成了调用谷歌验证码的脚本,按下“alt+空格键”唤出alfred,输入gauth(快捷键自由配置),点击Enter键即能复制并自动填充到客户端,十分方便。

image
三、基于python实现自动获取

谷歌验证码的运行机制其实是公开的,只需简单的计算,自己也能成为大神。

代码如下:

# !/usr/bin/python
# -*- coding:utf-8 -*-
'''
注意返回的是str,调用时,若需要int,则需要转换
'''

import hmac, base64, struct, hashlib, time
import platform

def get_hotp_token(secret, intervals_no):
    key = base64.b32decode(secret, True)
    msg = struct.pack(">Q", intervals_no)
    h = hmac.new(key, msg, hashlib.sha1).digest()
    # 很多网上的代码不可用,就在于这儿,没有chr字符串
    o = ord(chr(h[19])) & 15
    h = (struct.unpack(">I", h[o:o+4])[0] & 0x7fffffff) % 1000000
    return h

def get_totp_token(secret):
    return get_hotp_token(secret, intervals_no=int(time.time())//30)

def get_google_code():
    """
    :return: googlecode

    """
    # 判定系统,这里我因为涉及到本机和个人服务器,所以自己加了一步验证,读取不同的文件路径
    is_sys = platform.system()
    if is_sys == "Darwin":
        # 16位密码,我是保存在本机上的,由程序读取,增加安全性
        with open(r"/Users/xxx/Desktop/xxx/python/googlecode.txt", "r") as openfile:
            secret = openfile.readline()
    elif is_sys == "Linux":
        with open(r"/Users/xxx/pubkey/googlecode/googlecode.txt", "r") as openfile:
            secret = openfile.readline()
    else:
       # 自由发挥吧
       None

    openfile.close()
    googlecode = get_hotp_token(secret, intervals_no=int(time.time())//30)
    # 这儿需要注意,程序返回的是去0的字符串,比如验证码是005123,程序计算的结果是5123,所以,需要在前面补0,补到六位数
    return '%06d' % googlecode

三种实现方式优缺点评比:

浏览器插件

优点:安装简单,多款浏览器可用,多种操作系统可用
缺点:使用固定,无拓展性,操作相对其他两种较麻烦

基于alfred的workflow

优点:操作简单、使用方便
缺点:只适合mac os系统,需要了解alfred

基于python,自动获取的方式

优点:扩展性极强
缺点:需要一定的编程基础

那么,基于python的自动获取的方式,拓展性能达到哪种程度呢?

试想一下这个场景:

某天早上,你计划开始一天的工作,但开始工作前,你需要连接5台服务器、5个数据库,需要输入十次验证码,即便使用alfred,也得连续来十次,并且,谷歌验证码有30秒的时间间隔,你还得等到验证码更新后,才能进行下一步的操作。

而有了基于python自动获取的方式,悄悄告诉你,每天到公司,我只需要轻轻松松的点击一下桌面的app

like this:


image.png

剩下的,交给程序吧。我可以趁着间歇,洗洗水杯,泡杯茶,悠闲地开始一天的工作。


想知道更多后续内容,想知道如何解放双手,关注我,不容错过。
如果本文帮助到你,记得点赞点赞~~~

相关文章

网友评论

    本文标题:基于python,实现谷歌验证码的自动获取

    本文链接:https://www.haomeiwen.com/subject/xabndftx.html