打开电脑,无线网每次连接校园网(i-NUIST)的时候都会跳出一个认证界面,认证完才能上网,我的电脑有时候还抽风跳不出来这个网页,于是我就想做个登陆的脚本,连接上无线网直接自动登陆就好了。
工具:
1.python3.6
2.requests模块 和 base64模块
3.Google Chrome浏览器
过程:
我试了几下登陆,发现那就是个post过程。
打开谷歌浏览器
输入网址:http://a.nuist.edu.cn
输入校园网账号密码,按下F12开始抓包咯。。
就抓到了一条post包,还是jquery的。。。。
发送的数据:
post最关键的就是data包了,这个包也就password是加密的,其他还好,接下来就搞一下这个加密吧。。
先看一下它的长度,8位的,猜了一个md5加密,试了一下,发现不是。。
接下来怎么办呢。。。。
只能从他的js里面找它的加密方法,当然不是一行一行的分析它的源码,这样会累死的
很明显是在login.js里面
于是,打开这个文件,找啊找啊(此处省略过程),发现了点头绪。
还好我暑假看过一点jQuery的基础,看得懂他的ajax 跨域请求
看他的data项,找到了base64的加密,然后后面测试了一下也是正确的。
post请求的data应该可以构造了。
接下来看看,它要不要加什么协议头 ,cookie什么的。。。
其他都好构造,好像需要cookie
看了一下这两个cookie,应该是进入网页的时候生成的。
所以这个模拟登陆的正确流程应该是
我试了试,好像直接post 是可以的,不需要获取cookie,我想多了。
发送post后 他会返回一个json格式的信息,来告知你是否登陆成功
接下来是python代码
登陆函数:
需要requests 模块 和 base64模块
def login(username='账号',password='密码',domain='Unicom'): #要输入账号密码啊。。。
password = base64.b64encode(password.encode()).decode() #base64加密。。
url="http://a.nuist.edu.cn/index.php/index/login"
dv={ #构造data
'username':username,
'domain':domain,
'password':password,
'enablemacauth':0
}
try: #用try来防止未知错误。
r = requests.post(url,data=dv) #发送post
r.raise_for_status() #错误抛出异常
return r.json() 返回json格式的数据
except:
print('error')
完整代码:
import requests #导入库
import base64
def login(username='账号',password='密码',domain='Unicom'): #要输入账号密码啊。。。
password = base64.b64encode(password.encode()).decode() #base64加密。。
url="http://a.nuist.edu.cn/index.php/index/login"
dv={ #构造data
'username':username,
'domain':domain,
'password':password,
'enablemacauth':0
}
try: #用try来防止未知错误。
r = requests.post(url,data=dv) #发送post
r.raise_for_status() #错误抛出异常
return r.json() 返回json格式的数据
except:
print('error')
#下面输入你的账号密码,运营商:移动CMCC 联通Unicom 电信ChinaNet
dic=login('你的账号','密码','运营商')
for i in list(dic.keys()):
if dic[i]:
print(i+":"+str(dic[i])) #输出登陆信息,成功与否
input()
注销的代码也放上来:
比较简单
import requests
def logout():
url = 'http://a.nuist.edu.cn/index.php/index/logout'
try:
r = requests.post(url,timeout=30)
r.raise_for_status()
return r.json()['info']
except:
print('error')
#def main():
print(logout())
input()
此外,如果你不想连接上无线网就弹出登陆网页的话,那就要手动修改一下注册表了。
打开注册表
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NlaSvc\Parameters\Internet 中enableactiveprobing 调成0就行了