背景
我在的学校校园网登录是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了……
如果没有服务器,树莓派+路由器的组合也是一种解决方案~
当然最省钱的就是我这种把脚本直接跑在自己机器上的……
代码
#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
这个小脚本很简单,主要为大家提供一个思路~
编程语言可以方便我们的生活,我想这就是它存在的价值。
到此这篇关于Python实现校园网自动登录的脚本分享的文章就介绍到这了,更多相关Python校园网自动登录内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
查看更多关于Python实现校园网自动登录的脚本分享的详细内容...