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

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

项目场景:

在实验室的时候,每天的第一个苦恼就是面对不自动弹窗的校园网登录,且一个账号仅支持两个设备。

在这里插入图片描述
实验室使用了路由器,多个设备使用同一个账号上网,但是校园网又增加了新的防治手段——不定时监察mac地址,一旦发现多个设备使用,账号就会封禁十分钟,导致我们随时面临突然断网的局面,不得不一遍遍的重新登录。

于是,我想也许可以用脚本实现校园网网页自动登录,并随时检查掉网情况,掉网后立刻自动切换账号,这样三个账号就足以支持实验室十三个人的设备使用了。最终代码部署在树莓派上,二十四小时运行中~

解决方案:

我们选择用Python代码实现,主要使用request库。

网页自动登录

为了实现自动登录,我们先尝试找到校园网登陆认证的方式,进入浏览器的开发者工具页面(按键盘 F12 进入),使用Network进行一次嗅探。

勾选Preserve log,输入学号密码,点击连接看看会发生什么。
在这里插入图片描述
账号登录成功后,可以看见出现了日志文件,其中第一条是InterFace.do?method=login,可以确定这与我们登录事件相关。
在这里插入图片描述
点击InterFace.do?method=login查看详情,看见Headers数据中注明了Request Method为POST,于是需要用到post请求,我们记下这里URL很重要。
在这里插入图片描述
将URL写入代码:

import requests
import os
import time

se = requests.Session()
url = 'http://aaa.cqust.edu.cn/eportal/InterFace.do?method=login'

接着我们复制下Request Headers里的内容,作为post请求中的headers
在这里插入图片描述

headers = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Length': '691',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie': 'EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_AUTO_LAND=; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_COOKIE_DOMAIN=; EPORTAL_COOKIE_SAVEPASSWORD=false; EPORTAL_USER_GROUP=%E5%AD%A6%E7%94%9F%E7%94%A8%E6%88%B7%E7%BB%84; JSESSIONID=1CB3A057D3F6148CE60211697127F211',
    'Host': 'aaa.cqust.edu.cn',
    'Origin': 'http://aaa.cqust.edu.cn',
    'Referer': 'http://aaa.cqust.edu.cn/eportal/index.jsp?wlanuserip=b08a505e4edcf1de4f8d6def9300c813&wlanacname=fb99a169a691df67bf3dfe91e74c64e0&ssid=&nasip=f580e0fe31542da59fd3d5169d1170d2&snmpagentip=&mac=52d64b6ffe66f664589982b889188f08&t=wireless-v2&url=8766fb8b39ca7a8c9d2d32580b0e86c3418fca276674bcd1&apmac=&nasid=fb99a169a691df67bf3dfe91e74c64e0&vid=389c39dd8d6ff719&port=b310883cc19dee12&nasportid=5ebaebec10e8f9d5008b93f3a4e115691464686918b8e78eec758e130264eccbc78f57f55c1b1828',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}

接着我们查看Payload数据,可以看见我们的学号和密码明文出现在这里,
在这里插入图片描述

我们复制下Form Data里的内容,作为post请求中的data

data = {
    "userId": "*****",   # 填入你自己的学号
    "password": "*****",  # 填入你自己的密码
    "service": "%E4%BA%92%E8%81%94%E7%BD%91",
    "queryString": "wlanuserip%3D70add5ad03acb6bea3fbb9b4f89eaf87%26wlanacname%3Dfb99a169a691df67bf3dfe91e74c64e0%26ssid%3D%26nasip%3Df580e0fe31542da59fd3d5169d1170d2%26snmpagentip%3D%26mac%3Df267ac2c5ac13186ca4b89b43264cf83%26t%3Dwireless-v2%26url%3D8766fb8b39ca7a8c9d2d32580b0e86c3418fca276674bcd1%26apmac%3D%26nasid%3Dfb99a169a691df67bf3dfe91e74c64e0%26vid%3D0078d882ca634259%26port%3Dabdb062e34878ee0%26nasportid%3D5ebaebec10e8f9d5008b93f3a4e115699ccba3f613d6144229ea6a57aadb75b2f6f4e45cac13c61b",
    "operatorUserId": "",
    "validcode": "",
    "passwordEncrypt": "false"
}

加上post请求:

content = se.post(url, data=data, headers=headers)
print(content.text

到此自动登录的脚本已经大功告成了,附上自动网页登录的完整代码:

import requests

se = requests.Session()
url = 'http://aaa.cqust.edu.cn/eportal/InterFace.do?method=login'

headers = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Length': '691',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie': 'EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_AUTO_LAND=; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_COOKIE_DOMAIN=; EPORTAL_COOKIE_SAVEPASSWORD=false; EPORTAL_USER_GROUP=%E5%AD%A6%E7%94%9F%E7%94%A8%E6%88%B7%E7%BB%84; JSESSIONID=1CB3A057D3F6148CE60211697127F211',
    'Host': 'aaa.cqust.edu.cn',
    'Origin': 'http://aaa.cqust.edu.cn',
    'Referer': 'http://aaa.cqust.edu.cn/eportal/index.jsp?wlanuserip=b08a505e4edcf1de4f8d6def9300c813&wlanacname=fb99a169a691df67bf3dfe91e74c64e0&ssid=&nasip=f580e0fe31542da59fd3d5169d1170d2&snmpagentip=&mac=52d64b6ffe66f664589982b889188f08&t=wireless-v2&url=8766fb8b39ca7a8c9d2d32580b0e86c3418fca276674bcd1&apmac=&nasid=fb99a169a691df67bf3dfe91e74c64e0&vid=389c39dd8d6ff719&port=b310883cc19dee12&nasportid=5ebaebec10e8f9d5008b93f3a4e115691464686918b8e78eec758e130264eccbc78f57f55c1b1828',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'
}

data = {
    "userId": "202222222",   # 填入你自己的学号
    "password": "202222222",  # 填入你自己的密码
    "service": "%E4%BA%92%E8%81%94%E7%BD%91",
    "queryString": "wlanuserip%3D70add5ad03acb6bea3fbb9b4f89eaf87%26wlanacname%3Dfb99a169a691df67bf3dfe91e74c64e0%26ssid%3D%26nasip%3Df580e0fe31542da59fd3d5169d1170d2%26snmpagentip%3D%26mac%3Df267ac2c5ac13186ca4b89b43264cf83%26t%3Dwireless-v2%26url%3D8766fb8b39ca7a8c9d2d32580b0e86c3418fca276674bcd1%26apmac%3D%26nasid%3Dfb99a169a691df67bf3dfe91e74c64e0%26vid%3D0078d882ca634259%26port%3Dabdb062e34878ee0%26nasportid%3D5ebaebec10e8f9d5008b93f3a4e115699ccba3f613d6144229ea6a57aadb75b2f6f4e45cac13c61b",
    "operatorUserId": "",
    "validcode": "",
    "passwordEncrypt": "false"
}

content = se.post(url, data=data, headers=headers)
print(content.text)

自动换号重连

首先为了检测当前联网情况,我们需要使用ping百度的ip地址来查看,如果网络不通就换账号重连,

附上我们的主函数,其中data1,data2,data3分别是三位用户的账号:

def autowifi():
    global url
    global headers
    global person
    global data1
    global data2
    global data3
    datas = [data1, data2, data3]
    while (True):
    	result = os.system(u"ping baidu.com -c 5 -W 1")
        if result != 0:
            for data in datas:
                content = se.post(url, data=data, headers=headers)
                if content.json().get('result') == 'success':
                    print("online")
                    break
        print("wait 30s")
        time.sleep(30)

最后将三个用户的data填入即可,附上完整代码,供大家使用~

import requests
import os
import time

se = requests.Session()
url = 'http://aaa.cqust.edu.cn/eportal/InterFace.do?method=login'
data1 = {
    "userId": "202222222",   # 填入data1的学号
    "password": "202222222",  # 填入data1密码
    "service": "%E4%BA%92%E8%81%94%E7%BD%91",
    "queryString": "wlanuserip%3D70add5ad03acb6bea3fbb9b4f89eaf87%26wlanacname%3Dfb99a169a691df67bf3dfe91e74c64e0%26ssid%3D%26nasip%3Df580e0fe31542da59fd3d5169d1170d2%26snmpagentip%3D%26mac%3Df267ac2c5ac13186ca4b89b43264cf83%26t%3Dwireless-v2%26url%3D8766fb8b39ca7a8c9d2d32580b0e86c3418fca276674bcd1%26apmac%3D%26nasid%3Dfb99a169a691df67bf3dfe91e74c64e0%26vid%3D0078d882ca634259%26port%3Dabdb062e34878ee0%26nasportid%3D5ebaebec10e8f9d5008b93f3a4e115699ccba3f613d6144229ea6a57aadb75b2f6f4e45cac13c61b",
    "operatorUserId": "",
    "validcode": "",
    "passwordEncrypt": "false"
}
data2 = {
    "userId": "202222222",   # 填入data2的学号
    "password": "202222222",  # 填入data2的密码
    "service": "%E4%BA%92%E8%81%94%E7%BD%91",
    "queryString": "wlanuserip%3D70add5ad03acb6bea3fbb9b4f89eaf87%26wlanacname%3Dfb99a169a691df67bf3dfe91e74c64e0%26ssid%3D%26nasip%3Df580e0fe31542da59fd3d5169d1170d2%26snmpagentip%3D%26mac%3Df267ac2c5ac13186ca4b89b43264cf83%26t%3Dwireless-v2%26url%3D8766fb8b39ca7a8c9d2d32580b0e86c3418fca276674bcd1%26apmac%3D%26nasid%3Dfb99a169a691df67bf3dfe91e74c64e0%26vid%3D0078d882ca634259%26port%3Dabdb062e34878ee0%26nasportid%3D5ebaebec10e8f9d5008b93f3a4e115699ccba3f613d6144229ea6a57aadb75b2f6f4e45cac13c61b",
    "operatorUserId": "",
    "validcode": "",
    "passwordEncrypt": "false"
}
data3 = {
    "userId": "202222222",   # 填入data3的学号
    "password": "202222222",  # 填入data3的密码
    "service": "%E4%BA%92%E8%81%94%E7%BD%91",
    "queryString": "wlanuserip%3D70add5ad03acb6bea3fbb9b4f89eaf87%26wlanacname%3Dfb99a169a691df67bf3dfe91e74c64e0%26ssid%3D%26nasip%3Df580e0fe31542da59fd3d5169d1170d2%26snmpagentip%3D%26mac%3Df267ac2c5ac13186ca4b89b43264cf83%26t%3Dwireless-v2%26url%3D8766fb8b39ca7a8c9d2d32580b0e86c3418fca276674bcd1%26apmac%3D%26nasid%3Dfb99a169a691df67bf3dfe91e74c64e0%26vid%3D0078d882ca634259%26port%3Dabdb062e34878ee0%26nasportid%3D5ebaebec10e8f9d5008b93f3a4e115699ccba3f613d6144229ea6a57aadb75b2f6f4e45cac13c61b",
    "operatorUserId": "",
    "validcode": "",
    "passwordEncrypt": "false"
}

headers = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate',
    'Accept-Language': 'zh-CN,zh;q=0.9',
    'Connection': 'keep-alive',
    'Content-Length': '691',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Cookie': 'EPORTAL_COOKIE_OPERATORPWD=; EPORTAL_AUTO_LAND=; EPORTAL_COOKIE_USERNAME=; EPORTAL_COOKIE_PASSWORD=; EPORTAL_COOKIE_SERVER=; EPORTAL_COOKIE_SERVER_NAME=; EPORTAL_COOKIE_DOMAIN=; EPORTAL_COOKIE_SAVEPASSWORD=false; EPORTAL_USER_GROUP=%E5%AD%A6%E7%94%9F%E7%94%A8%E6%88%B7%E7%BB%84; JSESSIONID=1CB3A057D3F6148CE60211697127F211',
    'Host': 'aaa.cqust.edu.cn',
    'Origin': 'http://aaa.cqust.edu.cn',
    'Referer': 'http://aaa.cqust.edu.cn/eportal/index.jsp?wlanuserip=b08a505e4edcf1de4f8d6def9300c813&wlanacname=fb99a169a691df67bf3dfe91e74c64e0&ssid=&nasip=f580e0fe31542da59fd3d5169d1170d2&snmpagentip=&mac=52d64b6ffe66f664589982b889188f08&t=wireless-v2&url=8766fb8b39ca7a8c9d2d32580b0e86c3418fca276674bcd1&apmac=&nasid=fb99a169a691df67bf3dfe91e74c64e0&vid=389c39dd8d6ff719&port=b310883cc19dee12&nasportid=5ebaebec10e8f9d5008b93f3a4e115691464686918b8e78eec758e130264eccbc78f57f55c1b1828',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/99.0.4844.51 Safari/537.36'

}


def autowifi():
    global url
    global headers
    global person
    global data1
    global data2
    global data3
    datas = [data1, data2, data3]
    while (True):
        result = os.system(u"ping baidu.com -c 5 -W 1")
        if result != 0:
            for data in datas:
                content = se.post(url, data=data, headers=headers)
                if content.json().get('result') == 'success':
                    print("online")
                    break
        print("wait 30s")
        time.sleep(30)

autowifi()

树莓派

最后我们将代码部署在树莓派上,通过一根网线连接路由器,实现了实验室所有设备的网络覆盖,二十四小时运行~

在这里插入图片描述

  • 5
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值