Python实现校园网自动登录:抓包分析与代码实现
本文详细讲解如何利用Python和requests库实现校园网自动登录。通过Firefox浏览器和Firebug插件监控网络请求,分析POST请求的Header和Body参数。重点解析密码字段的Base64编码过程,并提供完整的Python登录脚本,帮助读者掌握网络请求模拟与数据构造技巧。
实现原理与准备工作
要实现校园网的自动登录,核心在于模拟浏览器发出的HTTP POST请求。我们需要获取登录接口的URL、请求头(Header)以及提交的数据(Body)。为了准确获取这些信息,推荐使用Firefox浏览器配合Firebug插件进行网络行为监控。
具体操作步骤如下:
- 打开Firefox浏览器,按F12键启动开发者工具,并切换到Firebug插件的“网络”选项卡。
- 在网页上点击“刷新”和“登录”按钮,以触发网络请求。
- 在控制台选项卡中查看发出的GET和POST方法请求。
- 重点保存POST方法的请求头(Header)信息,以及请求体(Body)中的变量和参数。



关键难点:密码加密分析
通用登录程序的最大难点通常在于构造加密后的密码字段。在抓包分析中,我们可能会发现密码并非明文传输,而是经过某种加密处理。
通过分析抓到的JavaScript代码(如login.js、md5.js、client.js等文件),我们可以推测密码的加密方式。在本例中,通过对比抓包数据与JS代码逻辑,发现密码字段实际上采用了Base64编码方式,且编码结果与抓到的postdata完全一致。因此,我们可以利用Python内置的base64库对密码进行编码,以构造正确的登录数据。

Python实现代码
以下是使用Python和requests库实现自动登录的完整代码示例。请注意,代码中的登录地址、Header信息和Cookie需要根据实际抓包结果进行替换。
import requests
#登录地址
post_addr="http://a.nuist.edu.cn/index.php/index/login"
#构造头部信息
post_header={
'Host': 'a.nuist.edu.cn',
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/x-www-form-urlencoded',
'X-Requested-With':'XMLHttpRequest',
'Referer':'http://a.nuist.edu.cn/index.php?url=aHR0cDovL2RldGVjdHBvcnRhbC5maXJlZm94LmNvbS9zdWNjZXNzLnR4dA==',
'Content-Length': '67',
'Cookie':'_gscu_1147341576=059821653286gq10; sunriseUsername=123441534;\
sunriseDomain=NUIST;sunriseRememberPassword=true; sunrisePassword=123456;\
PHPSESSID=hb0o9bkct2f6ge164oj3vj0me5;think_language=zh-CN',
'Connection':'keep-alive',
}
#构造登录数据
post_data={'domain':'NUIST',
'enablemacauth':'0',
'password':'MTgzMzEw',
'username':'xxxxxxx'
}
#发送post请求登录网页
z=requests.post(post_addr,data=post_data,headers=post_header)为了实现更通用的登录功能,我们可以将账号、域名和密码作为变量传入,并动态构造Header和Body。以下是优化后的代码:
#!/usr/bin/python3
# -*- coding: utf-8 -*-
'''
FileName:conNet.py
Author:shenhuixiang
Copyright(c)2017,shenhuixiang
'''
import base64
import requests
'''
输入账号密码和登录的网络
网络参数为如果是移动的则填写CMCC
如果是学号则填NUIST
'''
USER_ACCOUNT='110'
DOMAIN_SELECTION='CMCC'
USER_PASSWATD='123456'
#登录地址
post_addr="http://a.nuist.edu.cn/index.php/index/login"
#构造头部信息
post_header={
'Host': 'a.nuist.edu.cn',
'User-Agent':'Mozilla/5.0 (X11; Linux x86_64; rv:55.0) Gecko/20100101 Firefox/55.0',
'Accept': 'application/json, text/javascript, */*; q=0.01',
'Accept-Language':'zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3',
'Accept-Encoding': 'gzip, deflate',
'Content-Type': 'application/x-www-form-urlencoded',
'X-Requested-With':'XMLHttpRequest',
'Referer':'http://a.nuist.edu.cn/index.php?url=aHR0cDovL2RldGVjdHBvcnRhbC5maXJlZm94LmNvbS9zdWNjZXNzLnR4dA==',
'Content-Length': '67',
'Cookie':'_gscu_1147341576=059821653286gq10; sunriseUsername='+USER_ACCOUNT+';\
sunriseDomain='+DOMAIN_SELECTION+';sunriseRememberPassword=true; sunrisePassword='+USER_PASSWATD+';\
PHPSESSID=hb0o9bkct2f6ge164oj3vj0me5;think_language=zh-CN',
'Connection':'keep-alive',
}
'''
password在post的参数中经过base64编码,
为了查找password加密方式...吐血三升.
'''
post_data={'domain':DOMAIN_SELECTION,
'enablemacauth':'0',
'password':base64.b64encode(USER_PASSWATD.encode()),
'username':USER_ACCOUNT
}
#发送post请求登录网页
z=requests.post(post_addr,data=post_data,headers=post_header)
#z.text为str类型的json数据因此先编码成byte类型在解码成unicode型这样就可以正常输出中文
s=z.text.encode('utf-8').decode('unicode-escape')
print(s)总结
通过上述步骤,我们成功实现了校园网的自动登录。关键在于准确抓取网络请求,并正确构造请求头和请求体。对于密码加密的情况,通过分析JavaScript代码,我们可以找到加密规律,并使用相应的Python库进行模拟。希望本文能帮助你更好地理解和应用网络请求模拟技术。
以上就是python实现校园网自动登录的示例讲解的详细内容,更多关于python自动登录的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









