锐捷校园网自动登录脚本

# 协议(License):署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
# 作者(Author):Astrophel
# 链接(URL):https://www.astrophel.top/?p=507
# 来源(Source):Astrophel
 

原文地址ヾ(❀╹◡╹)ノ~:锐捷校园网自动登录脚本 – Astrophelhttps://www.astrophel.top/?p=507

目录

起因

分析

实现

抓包

python代码

优化

更多内容


起因

由于校园网采用网页端认证方式,自从宿舍里放上树莓派,每天都需要手动连接键盘鼠标显示器来让pi登陆。为了更方便的摸鱼,决定写一个自动登录校园网的脚本,每天在树莓派上定时运行。

分析

校园网登陆采用锐捷的解决方案,应该是国内大学使用率比较高的一个系统。首先考虑使用python Selenium写一个自动化脚本,几经尝试,总是无法成功提交表单。同时考虑selenium依赖于浏览器驱动,不具有普适性,所以放弃这一方法。

在使用Chrome的网络调试工具对登陆过程进行抓包后,发现该系统将用户输入在前端输入的表单POST到后端,而且没有加密(?所以决定用python requests库模拟该过程。

第一次尝试,将请求体内的载荷写成一个字典data,使用requests.post方法提交到抓包得到的login URL上,结果失败。分析是因为没有携带请求头,导致认证服务器发现端倪。

第二次尝试,将请求头写成一个字典,与data一并提交,依旧失败。检查后发现操作失误导致两次登陆使用了不同的Referer,认证服务器识别到这一点,返回失败值。 最后一次,纠正了headers和data两个字典中不匹配的内容,再次post,返回success。

实现

抓包

使用Chrome抓取登陆按钮点击后日志中的/InterFace.do?method=login内容,查看URL,请求头和请求体(载荷)

python代码

import requests
 
url='http://www.example.com/eportal/InterFace.do?method=login' #在此处替换抓包得到的登陆报文URL
 
#<------将抓包得到的headers内容填写到键值对中------>
headers={
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36',
    'Cache-Control':'no-cache',
    'Connection':'keep-alive',
    'Content-Length':'', #填写抓包得到的值
    'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie': '', #填写抓包得到的cookie
    'Host':'', #填写抓包得到的host
    'Origin':'', #填写抓包得到的origin
    'Pragma':'no-cache',
    'Referer':'' #填写抓包得到的referer
}
#<------headers结束------>
 
#<------将抓包得到的载荷内容填写到键值对中------>
data={
    'userId':'', #填写抓包得到的userId
    'password':'', #填写抓包得到的password
    'service':'', #填写抓包得到的service
    'queryString':'',
    'operatorPwd':'',
    'operatorUserId':'',
    'validcode':'',
    'passwordEncrypt':'false' #填写抓包得到的passwordEncrypt
}
#<------载荷结束------>
 
respond = requests.post(url=url, data=data, headers=headers) #调用requests的post方法请求URL
#输出必要的信息,响应正文中出现success代表登陆成功
print(data)
print('状态码:', respond.status_code)
print('响应头信息:', respond.headers)
print('响应正文:', respond.text)

使用抓包内容替代上述代码中的内容,如有冲突以抓包结果为准。

优化


之后就是让代码在Linux里开机自动执行,不想写具体方法了(摆!

以上思路适用于iOS和macOS的快捷指令,不想写具体方法了(摆!

以上

更多内容

Astrophel - 我的学习知识记录https://www.astrophel.top

  • 26
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值