• 【技术分享】Python脚本实现BJTU校园网自动登录


    在这里插入图片描述

    1.背景介绍

    BJTU的校园网连接好以后需要输入账号和密码才能正确登录,如下图所示。整个流程比较繁琐,尤其是很多服务器、工作站是无图形化的系统,大部分时间需要SSH连接,所以通过界面登录十分不方便。

    在这里插入图片描述

    所以就想了一个办法,利用Python脚本来检测校园网是否处于登录状态,如果登录了就不操作;如果未登录则需要自动登录。

    2.登录分析

    众所周知,校园网登录界面有2个IP可以使用,分别是:10.10.42.310.10.43.3。在浏览器输入上述IP后可以看到如下界面:

    在这里插入图片描述

    在网页空白处点击鼠标右键,选择“检查”打开调试模式,点击网络->选择全部,可以查看所有的网络发送请求。

    在这里插入图片描述

    在账号密码懒输入自己的账号和密码,然后点击登录。然后可以在右侧看到login?callback=dr……的一条请求,如下图所示:

    在这里插入图片描述

    然后点击发送的请求数据,将请求网址的内容复制出来,如下图所示。

    在这里插入图片描述

    3.代码分析

    首先需要导入所有需要的包。re包用来做正则匹配;requests包用于发请求;time包和strftime包用于获取时间输出信息。

    import re
    import requests
    from time import strftime
    import time
    
    • 1
    • 2
    • 3
    • 4

    然后获取访问的地址,可以是10.10.43.3,也可以是10.10.42.3

    # URL
    schoolWebURL = 'http://10.10.42.3'  # 或者是'http://10.10.43.3'
    
    • 1
    • 2

    紧接着需要写一个死循环,保证时刻在运行着这个程序。

    while(True):
    	# XXXX 此处需要补充核心代码
    
    • 1
    • 2

    if判断语句,判断是在线状态还是离线状态(代码直接用就可以)。 如果是在线状态,休息5秒钟,再执行while死循环。

    # 正则表达式,匹配标签中的内容</span>
    pattern <span class="token operator">=</span> re<span class="token punctuation">.</span><span class="token builtin">compile</span><span class="token punctuation">(</span><span class="token string">'<title>(.*?)', re.S)
    title = re.findall(pattern, response.text)
    title = title[0]  # 将格式转为字符串
    
    if title == '注销页':
        print('%s %s 连接正常' % (strftime('%Y-%m-%d'),strftime('%H:%M:%S')))
        time.sleep(5)
        pass
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    如果是离线状态,需要访问网址,实现登录。user的地方填自己的学号,p填密码,其余的都无需修改。

    user = ''  # 学号
    p = 'XXX'  # 密码
    t = str(int(round(time.time() * 1000)))  # 毫秒级时间戳
    schoolWebLoginURL = schoolWebURL+'/drcom/login?callback=dr'+t+'&DDDDD='+user+'&upass='+p+'&0MKKey=123456&R1=0&R3=0&R6=0¶=00&v6ip=&_='+t
    print('%s %s 登录成功' % (strftime('%Y-%m-%d'),strftime('%H:%M:%S')))
    requests.get(schoolWebLoginURL)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    最后将所有代码整合在一起即可。

    4.源代码

    文件名: autologin.py

    代码如下:

    import re
    import requests
    from time import strftime
    import time
    
    # URL地址
    schoolWebURL = 'http://10.10.42.3'  # 或者是'http://10.10.43.3'
    
    while(True):
        response = requests.get(schoolWebURL)
    
        # 正则表达式,匹配标签中的内容</span>
        pattern <span class="token operator">=</span> re<span class="token punctuation">.</span><span class="token builtin">compile</span><span class="token punctuation">(</span><span class="token string">'<title>(.*?)', re.S)
        title = re.findall(pattern, response.text)
        title = title[0]  # 将格式转为字符串
    
        if title == '注销页':
            print('%s %s 连接正常' % (strftime('%Y-%m-%d'),strftime('%H:%M:%S')))
            time.sleep(5)
            pass
        
        else:
            user = ''  # 学号
            p = 'XXX'  # 密码
            t = str(int(round(time.time() * 1000)))  # 毫秒级时间戳
            schoolWebLoginURL = schoolWebURL+'/drcom/login?callback=dr'+t+'&DDDDD='+user+'&upass='+p+'&0MKKey=123456&R1=0&R3=0&R6=0¶=00&v6ip=&_='+t
            print('%s %s 登录成功' % (strftime('%Y-%m-%d'),strftime('%H:%M:%S')))
            requests.get(schoolWebLoginURL)
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    使用方法:

    在命令行执行下列脚本,即可完成自动登录、网络判断。

    python3 authlogin.py
    
    • 1

    5.参考文献

  • 相关阅读:
    Hystrix Dashboard断路监控仪表盘
    关于Vue3 + Ts 项目 遇到 关于路径动态加载 和 组件拷贝关系问题的记录
    3d激光SLAM:LIO-SAM框架---IMU预积分流程
    基于Rplidar二维雷达使用Hector_SLAM算法在ROS中建图
    微服务远程调用之拦截器实战
    Blender纹理UV映射快速入门
    王阳明学习笔记
    TinyShell(CSAPP实验)
    看完阿里最新产500页微服务架构笔记,感觉我格局太小
    一元线性回归β0的大样本方差怎么证明?
  • 原文地址:https://blog.csdn.net/m0_38068876/article/details/128058633