• Python 实现校园网自动登录


    背景

    我在的学校校园网登录是web式的,即随便打开一个网页就会自动跳转到登录页面,然后输入用户名密码,点登录,便可以上网了。

    但这种登录方式有个缺点:登录状态不会一直保持下去。即过一段时间就会掉线,然后你需要重新登陆才行。这个时间大概是一天。

    这就蛋疼了,想让实验室的电脑随时保持联网状态怎么办呢?(有时候我需要远程我的电脑)

    这个时候可以用python脚本解决这个问题!

    思路

    写一个死循环一直 ping 8.8.8.8,如果 ping 通说明正连着网,进入下一次循环;如果 ping 不通,说明断网了,尝试登陆校园网,然后进入下一次循环。即:

    ping 8.8.8.8 —> 如果已联网 —> 继续 ping 8.8.8.8 —> …… —> 如果断网 —> 尝试登陆 —> 登陆成功 —> ping 8.8.8.8 ……

    脚本写好后放到 windows 的计划任务里设置开机启动。

    或者在linux中设置 crontab,一样的道理。

    技术点

    •利用 python 进行 post 请求

    •base64加密解密

    •利用 subprocess 创建子进程

    碎碎念

    脚本在后台运行cpu占用大概为 1~2%,内存占用大概为 4M 左右,完全可以接受。

    当然如果你有条件的话,运行在内网服务器上也是极好的,顺便可以连个路由器出来,这样实验室的小伙伴能用不断网的wifi了……

    如果没有服务器,树莓派+路由器的组合也是一种解决方案~

    当然最省钱的就是我这种把脚本直接跑在自己机器上的……

    代码

    python学习交流Q群:906715085###
    #coding=utf8
    import urllib,urllib2
    import base64
    import os , subprocess
    
    username = '你的base64加密过的校园网用户名'
    password  = '你的base64加密过的校园网密码'
    url = 'https://login.xxxx.edu.cn/auth_action.php'   # 校园网登陆验证地址
    
    def isConnecting():
        # Judge network connect status
        res = subprocess.call('ping 8.8.8.8 -n 1',shell=True)
        return False if res else True
    
    def Signon():
        # Sign on
        data = {
            'action' : 'login',
            'username' : base64.decodestring(username),
            'password' : base64.decodestring(password),
            'ac_id' : 1,
            'save_me' : 0,
            'ajax' : 1,
        }
        data = urllib.urlencode(data)
        response = urllib2.urlopen(url,data=data)
        response = response.read().decode('utf8')
        print response
    
    def main():
        while True:
            if not isConnecting():
                # no-connect status, attempt sign on
                Signon()
    
    if __name__=="__main__":
        try:
            main()
        except Exception,e:
            print '[ERROR]:',
            print e
    
    • 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
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42

    这个小脚本很简单,主要为大家提供一个思路~

    最后

    编程语言可以方便我们的生活,我想这就是它存在的价值。这一章的小技能还是十分实用的,代码也就区区几十行,非常的简单

    哟!!这一章到这里就结束了,下一章见啦!

  • 相关阅读:
    利用TypeScript 和 jsdom 库实现自动化抓取数据
    c: 关于大小端存储
    MAC手动修复『已损坏』问题 终端运行命令报错处理
    Linux常用的调试工具
    C语言代码优化的艺术:深度探索与实践策略
    Kafka从安装使用到集成Springboot详细教程
    机器学习面试准备(一)KNN
    浅谈OAuth 2.0与JWT
    docker-compose部署Atomci(云原生CICD平台)
    一文带你零基础深入理解随机变量,概率分布与统计量
  • 原文地址:https://blog.csdn.net/xff123456_/article/details/125332060