文章目录
- 1.背景介绍
- 2.登录分析
- 3.代码分析
- 4.源代码
1.背景介绍
BJTU的校园网连接好以后需要输入账号和密码才能正确登录,如下图所示。整个流程比较繁琐,尤其是很多服务器、工作站是无图形化的系统,大部分时间需要SSH连接,所以通过界面登录十分不方便。
所以就想了一个办法,利用Python脚本来检测校园网是否处于登录状态,如果登录了就不操作;如果未登录则需要自动登录。
2.登录分析
众所周知,校园网登录界面有2个IP可以使用,分别是:10.10.42.3
和10.10.43.3
。在浏览器输入上述IP后可以看到如下界面:
在网页空白处点击鼠标右键,选择“检查”打开调试模式,点击网络
->选择全部
,可以查看所有的网络发送请求。
在账号密码懒输入自己的账号和密码,然后点击登录。然后可以在右侧看到login?callback=dr……
的一条请求,如下图所示:
然后点击发送的请求数据,将请求网址的内容复制出来,如下图所示。
3.代码分析
首先需要导入所有需要的包。re
包用来做正则匹配;requests
包用于发请求;time
包和strftime
包用于获取时间输出信息。
import re
import requests
from time import strftime
import time
然后获取访问的地址,可以是10.10.43.3
,也可以是10.10.42.3
。
# URL
schoolWebURL = 'http://10.10.42.3' # 或者是'http://10.10.43.3'
紧接着需要写一个死循环,保证时刻在运行着这个程序。
while(True):
# XXXX 此处需要补充核心代码
写if
判断语句,判断是在线状态还是离线状态(代码直接用就可以)。 如果是在线状态,休息5秒钟,再执行while死循环。
# 正则表达式,匹配<title>标签中的内容
pattern = re.compile('<title>(.*?)</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
如果是离线状态,需要访问网址,实现登录。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)
最后将所有代码整合在一起即可。
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)
# 正则表达式,匹配<title>标签中的内容
pattern = re.compile('<title>(.*?)</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)
使用方法:
在命令行执行下列脚本,即可完成自动登录、网络判断。
python3 authlogin.py