深澜校园网自动登录

1.分析api

连接到校园网,自动弹出登录认证界面
http://172.16.100.32/srun_portal_pc?ac_id=1&theme=basic

先输入错误的账号密码,按F12看会获取哪些信息


get_challenge
请求方式为get,地址为
http://172.16.100.32/cgi-bin/get_challenge

请求的数据为

参数 分析
callback jsonp解决跨域的参数
username 校园网账户
ip 本机自动获取到的ip
_ 当前时间戳(32)位

参数分析完毕,看看服务器返回的什么吧

这里是不需要分析的。唯一需要注意的是challenge,因为太过诡异。


srun_portal
请求方式为get,地址为
http://172.16.100.32/cgi-bin/srun_portal

请求数据为

看到这一大串,可能不太好下手。确实参数有点多。
多观察几次,先找不变的参数,排除掉。

参数 分析
callback 和第一次的callback意思一样,排除
action login
username 账户
ac_id 1(意义不详,每次都一样可以排除了)
ip 自动获取的ip
n 200(和ac_id一样排除)
type 1(和ac_id一样排除)
os windows10
name windows
double_stack 0
_ 当前时间戳(13位)

一共14个参数,一下子pass11个,还剩下3个参数分别是 password chksum info
接下来开始分析js文件,一共4个

搜索关键字:password

这个是什么,这个不就是我们请求的参数吗,一下全都出来了,继续搜索对应关键字。

hmd5就找出来了,是经过md5加密之后的密码,还做过加盐处理
至于token就是之前的challenge

接下来是chksum一样的方法,搜索关键字。

可以发现是简单的字符串拼接。然后用sha1加密得出chksum。
可是还有个i是什么呢。继续找吧

都出来了,对象转为字符串之后进行xEncode(天知道是什么加密方式)进行加密,反正也是加盐的加密。也用到了token。之后再进行一次base64加密。i就出来了
i出来了,chksum也出来了。顺序不能错。
处理顺序

参数 加密方式
password Hmac MD5加密
chksum sha1处理

3个参数都需要用到token,至于加密方式更加是坑
只有sha1和md5是可以直接用的。
xencode更加不知道是什么鬼东西,base64是经过改动的。和正常的base64是不一样的。

2.分析加密

python版的xencode

import math
def force(msg):ret = []for w in msg:ret.append(ord(w))return bytes(ret)
def ordat(msg, idx):if len(msg) > idx:return ord(msg[idx])return 0
def sencode(msg, key):l = len(msg)pwd = []for i in range(0, l, 4):pwd.append(ordat(msg, i) | ordat(msg, i + 1) << 8 | ordat(msg, i + 2) << 16| ordat(msg, i + 3) << 24)if key:pwd.append(l)return pwd
def lencode(msg, key):l = len(msg)ll = (l - 1) << 2if key:m = msg[l - 1]if m < ll - 3 or m > ll:returnll = mfor i in range(0, l):msg[i] = chr(msg[i] & 0xff) + chr(msg[i] >> 8 & 0xff) + chr(msg[i] >> 16 & 0xff) + chr(msg[i] >> 24 & 0xff)if key:return "".join(msg)[0:ll]return "".join(msg)
def get_xencode(msg, key):if msg == "":return ""pwd = sencode(msg, True)pwdk = sencode(key, False)if len(pwdk) < 4:pwdk = pwdk + [0] * (4 - len(pwdk))n = len(pwd) - 1z = pwd[n]y = pwd[0]c = 0x86014019 | 0x183639A0m = 0e = 0p = 0q = math.floor(6 + 52 / (n + 1))d = 0while 0 < q:d = d + c & (0x8CE0D9BF | 0x731F2640)e = d >> 2 & 3p = 0while p < n:y = pwd[p + 1]m = z >> 5 ^ y << 2m = m + ((y >> 3 ^ z << 4) ^ (d ^ y))m = m + (pwdk[(p & 3) ^ e] ^ z)pwd[p] = pwd[p] + m & (0xEFB8D130 | 0x10472ECF)z = pwd[p]p = p + 1y = pwd[0]m = z >> 5 ^ y << 2m = m + ((y >> 3 ^ z << 4) ^ (d ^ y))m = m + (pwdk[(p & 3) ^ e] ^ z)pwd[n] = pwd[n] + m & (0xBB390742 | 0x44C6F8BD)z = pwd[n]q = q - 1return lencode(pwd, False)

python版base64

_PADCHAR = "="
_ALPHA = "LVoJPiCN2R8G90yg+hmFHuacZ1OWMnrsSTXkYpUq/3dlbfKwv6xztjI7DeBE45QA"
def _getbyte(s, i):x = ord(s[i]);if (x > 255):print("INVALID_CHARACTER_ERR: DOM Exception 5")exit(0)return x
def get_base64(s):i=0b10=0x = []imax = len(s) - len(s) % 3;if len(s) == 0:return sfor i in range(0,imax,3):b10 = (_getbyte(s, i) << 16) | (_getbyte(s, i + 1) << 8) | _getbyte(s, i + 2);x.append(_ALPHA[(b10 >> 18)]);x.append(_ALPHA[((b10 >> 12) & 63)]);x.append(_ALPHA[((b10 >> 6) & 63)]);x.append(_ALPHA[(b10 & 63)])i=imaxif len(s) - imax ==1:b10 = _getbyte(s, i) << 16;x.append(_ALPHA[(b10 >> 18)] + _ALPHA[((b10 >> 12) & 63)] + _PADCHAR + _PADCHAR);else:b10 = (_getbyte(s, i) << 16) | (_getbyte(s, i + 1) << 8);x.append(_ALPHA[(b10 >> 18)] + _ALPHA[((b10 >> 12) & 63)] + _ALPHA[((b10 >> 6) & 63)] + _PADCHAR);return "".join(x)

md5

import hmac
import hashlib
def get_md5(password,token):return hmac.new(token.encode(), password.encode(), hashlib.md5).hexdigest()

sha1

import hashlib
def get_sha1(value):return hashlib.sha1(value.encode()).hexdigest()

流程总结

  • 第一次get_challenge是获取token。
  • 中间做了3个信息的处理
  • 最后一步就是登录和认证了

3.模拟登录

import requests
import time
import re
from encryption.srun_md5 import *
from encryption.srun_sha1 import *
from encryption.srun_base64 import *
from encryption.srun_xencode import *
header={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.26 Safari/537.36'
}
init_url="http://172.16.100.32"
get_challenge_api="http://172.16.100.32//cgi-bin/get_challenge"srun_portal_api="http://172.16.100.32/cgi-bin/srun_portal"
get_info_api="http://172.16.100.32/cgi-bin/rad_user_info?callback=jQuery112406118340540763985_1556004912581&_=1556004912582"
n = '200'
type = '1'
ac_id='1'
enc = "srun_bx1"def get_chksum():chkstr = token+usernamechkstr += token+hmd5chkstr += token+ac_idchkstr += token+ipchkstr += token+nchkstr += token+typechkstr += token+ireturn chkstr
def get_info():info_temp={"username":username,"password":password,"ip":ip,"acid":ac_id,"enc_ver":enc}i=re.sub("'",'"',str(info_temp))i=re.sub(" ",'',i)return i
def init_getip():global ipinit_res=requests.get(init_url,headers=header)print("初始化获取ip")ip=re.search('id="user_ip" value="(.*?)"',init_res.text).group(1)print("ip:"+ip)
def get_token():# print("获取token")global tokenget_challenge_params={"callback": "jQuery112404953340710317169_"+str(int(time.time()*1000)),"username":username,"ip":ip,"_":int(time.time()*1000),}get_challenge_res=requests.get(get_challenge_api,params=get_challenge_params,headers=header)token=re.search('"challenge":"(.*?)"',get_challenge_res.text).group(1)#print(get_challenge_res.text)print("token为:"+token)
def do_complex_work():global i,hmd5,chksumi=get_info()i="{SRBX1}"+get_base64(get_xencode(i,token))hmd5=get_md5(password,token)chksum=get_sha1(get_chksum())print("所有加密工作已完成")
def login():srun_portal_params={'callback': 'jQuery11240645308969735664_'+str(int(time.time()*1000)),'action':'login','username':username,'password':'{MD5}'+hmd5,'ac_id':ac_id,'ip':ip,'chksum':chksum,'info':i,'n':n,'type':type,'os':'windows+10','name':'windows','double_stack':'0','_':int(time.time()*1000)}# print(srun_portal_params)srun_portal_res=requests.get(srun_portal_api,params=srun_portal_params,headers=header)#print(srun_portal_res.text)
if __name__ == '__main__':global username,passwordusername="24217407159"password="151232"init_getip()get_token()do_complex_work()login()res=requests.get(get_info_api,headers=header)print("用户",username,'登陆成功!')

查看截图

登录成功

码云的仓库地址
https://gitee.com/yshbcom/auto_srun.git

校园网自动登录Python版相关推荐

  1. 北邮校园网自动登录 python

    学校的联网每次都要打开浏览器,然后点击登录...很麻烦的样子,研究了一个晚上写了个自动登录的东西: 模拟登录,实际上就是模拟浏览器行为,一个动作,看浏览器发送了什么..你跟着发送什么就ok啦: imp ...

  2. 南信大iNUIST校园网自动登录代码

    南京信息工程大学校园网自动登录python代码 1. 登录网站 http://a.nuist.edu.cn/ 2. python3自动运行代码 2.1 修改的以下代码第46行,运营商类型和账号.密码即 ...

  3. python自动登录教程_python实现校园网自动登录的示例讲解

    因为最近想用树莓派搞个远程监控系统,又因为学校的网需要从网页登录而树莓派又不方便搞个显示器带着,所以寻思着搞个能够自动登录校园网的脚本程序,省去了每次都要打开浏览器输入账号密码的烦恼. 1.工具 火狐 ...

  4. python自动登录校园网 密码_python实现校园网自动登录的示例讲解

    因为最近想用树莓派搞个远程监控系统,又因为学校的网需要从网页登录而树莓派又不方便搞个显示器带着,所以寻思着搞个能够自动登录校园网的脚本程序,省去了每次都要打开浏览器输入账号密码的烦恼. 1.工具 火狐 ...

  5. python校园网登录_python实现校园网自动登录的示例讲解

    python实现校园网自动登录的示例讲解 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  python实现校园网自动登录的示例讲解.txt ] (友情提示:右键点上 ...

  6. 利用Python实现校园网自动登录(部署在树莓派)

    利用Python实现校园网自动登录(部署在树莓派) 项目场景: 在实验室的时候,每天的第一个苦恼就是面对不自动弹窗的校园网登录,且一个账号仅支持两个设备. 实验室使用了路由器,多个设备使用同一个账号上 ...

  7. 【Python】基于Selenium实现上海大学校园网自动登录

    [Python]基于Selenium实现上海大学校园网自动登录 安装selenium Selenium官网 以anaconda环境为例,创建一个Selenium的虚拟环境,若不需要可以不做第一.二步 ...

  8. Ubuntu20.04实现Python基于Selenium实现上海大学校园网自动登录

    Ubuntu20.04实现Python基于Selenium实现上海大学校园网自动登录 以anaconda环境为例,创建一个Selenium的虚拟环境: 一.安装selenium 1. conda cr ...

  9. 使用python或curl实现校园网自动登录

    一.引入 学校的校园网每天十二点断网,然后第二天六点恢复,学校允许外接路由器.但是呢,每天早上起来还得打开网页认证一下,尝试使用python脚本进行自动登录,很成功.但是呢,想想又很烦,还得使用pyt ...

  10. python—四川大学校园网自动登录

    四川大学校园网自动登录 import requests import redef getLoginMsg():url = 'http://192.168.2.135'r = requests.get( ...

最新文章

  1. stella forum v 2.0 的两款主题样式
  2. 三次握手和四次挥手图解_图解 TCP 三次握手和四次挥手
  3. 安装VMwareTools后虚拟机中的鼠标滚轮无法使用解决办法
  4. 鸿蒙适配倒计时,倒计时2天!首批鸿蒙OS适配名单确定,你的手机在列吗?
  5. AJPFX关于StringBuffer类的总结
  6. mysql日期加减计算
  7. 社区医学的研究方法:调查、流行病学研究、方案评估、临床试验Research Methods in Community Medicine: Surveys, Epidemiological Resear
  8. 第二次实验报告(漏)
  9. freemarker的测试结果框架_java必背综合知识点总结(框架篇)
  10. C++基础之返回数组
  11. 关于消灭冲击波的蠕虫
  12. 【黑马程序员】-c函数
  13. CAD填充块Hatch的深度解析
  14. 小林和腾讯不得不说的故事(完整篇)
  15. STM32学习笔记(6):PWM控制
  16. 大学生php实训总结_php实训报告心得体会
  17. 【前端三件套——CSS基础】网页开发必备知识
  18. 【安全防御】IPsec VPN
  19. Java订单系统中并发问题和锁机制的探讨与解决方案一
  20. Kali+mitmproxy 超级详细的ssl劫持和窥窃动妹子上网动态(劫包,返回想要的内容)

热门文章

  1. ipad怎么阅读html文件,iPad浏览器怎么开阅读模式
  2. 傅里叶变换的矩阵分析
  3. 【天光学术】休闲体育论文:中小学学生羽毛球运动员心理训练方法研究
  4. 市场调研策划书_市场调研计划书3篇(资料4)
  5. ZEMAX | 在OpticStudio中建立扩增实境(VR)头戴式显示器
  6. 人工神经网络概念及组成,人工神经网络发展史
  7. Java NIO 中的非阻塞究竟体现在哪里?
  8. 用C语言求解合式公式的主合取范式和主析取范式
  9. 台湾瑞昱Realtek RTL8153-VC-CG USB3.0 to lan简介
  10. 时间管理_个人计划表