数字中南比较麻烦的一点就是每天打开电脑都需要去登陆
或者每次午夜十二点左右的时候,都会突然断网
这对我这些lol玩家之一来说,突然掉线有多难受
再加上最近想上手树莓派,但是联网还需要打开浏览器来验证
干脆就直接写成一个python脚本了
话不多说
第一步肯定是从抓包开始
先打开校园网登陆的界面
我这里使用的抓包工具是Fiddler4,当然,你也可以使用其他软件
然后就模拟校园网登陆一次,下面是抓包的结果
然后Fiddler4保存(File -> Save -> All sessions )
保存起来慢慢看,毕竟我也是萌新
然后我们看,很容易便看到一个URL是 /portaNat444/AccessServices/login的请求。
我们点进去看一下request和response的内容
我们发现,post请求中accountID是输入框中的账号+%40zndx.inter,而password是加密后的密码
brasAddress是接入点设备地址
userIntranerAddress是网络地址
然后就是写脚本的时候了,网络地址每次登陆的时候都可能不一样,接入点设备不变
所以要写个方法来获取,其实也很简单,就两行
def get_ip(): host_name = socket.gethostname() return socket.gethostbyname(host_name)
然后,我们把请求头给复制下来 ,也就是本文的第三张图片
post_header = { 'Host': '61.137.86.87:8080', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko Core/1.63.6756.400 QQBrowser/10.2.2518.400', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'zh-CN', 'Accept-Encoding': 'gzip, deflate', 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8', 'X-Requested-With': 'XMLHttpRequest', 'Referer': 'http://61.137.86.87:8080/portalNat444/index.jsp', 'Content-Length': '355', 'Cookie': 'JSESSIONID=2F975DCF3FBC710D56CEA180C4EF8F65', 'Connection': 'keep-alive', }
算了,直接放代码了
#coding=utf-8 import os import socket from subprocess import check_output import urllib.request def login(): print("------loading------") post_header = { 'Host': '61.137.86.87:8080', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko Core/1.63.6756.400 QQBrowser/10.2.2518.400', 'Accept': 'application/json, text/javascript, */*; q=0.01', 'Accept-Language': 'zh-CN', 'Accept-Encoding': 'gzip, deflate', 'Content-Type': 'application/x-www-form-urlencoded;charset=utf-8', 'X-Requested-With': 'XMLHttpRequest', 'Referer': 'http://61.137.86.87:8080/portalNat444/index.jsp', 'Content-Length': '355', 'Cookie': 'JSESSIONID=2F975DCF3FBC710D56CEA180C4EF8F65', 'Connection': 'keep-alive', } account = "[email protected]" account1 = "[email protected]" password1 = "55893d79972c1b2b1b31496c5cd0baf6083d321072c5c8f9b73335a359164aa5174acc9d3224bc93619d793b17d8ae5085f9370beb171744f13a62f5f545d3d7c44bf25aee4c4807e8e7dfa5eae1388a5205b3b3ac8a091e9501b42feb532cc4c1c9cceafda36d96533888055de3a4bea1c1c63523daec3e2cb1959b7a5ad86b" password = "8312df7aa6c9daae13110210f4df47450858540b654094ff8ae56d1b38aeb182be1e34b7b9b33d5f11fdb6f195c46bc2e227008534cc5980ed12bc1e36a8068034c51b218b3c6c0db83ea03c0d3140ea8d83f2b8ce2706eea68fb430bb86c012c55690cab0f0a5aba5216902640992ab456feee00b84654d690088643dec8949" brasAddress = "59df7586" ip = get_ip() print(ip) url = "http://61.137.86.87:8080/portalNat444/AccessServices/login" formData = {'accountID': account, 'password': password, 'brasAddress': brasAddress, 'userIntranetAddress': ip} # 将str类型转换为bytes类型 data = urllib.parse.urlencode(formData).encode("utf-8") request = urllib.request.Request(url, data=data,headers=post_header) print(urllib.request.urlopen(request).read().decode("utf-8")) # 获取IP地址第二种方法 def get_ip(): host_name = socket.gethostname() return socket.gethostbyname(host_name)
if __name__ == '__main__': login()