python实现数字中南校园网自动登陆

数字中南比较麻烦的一点就是每天打开电脑都需要去登陆

或者每次午夜十二点左右的时候,都会突然断网

这对我这些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()

猜你喜欢

转载自blog.csdn.net/qq_20176001/article/details/83686086