汕头大学校园网自动联网教程(Window版本)2024.01.23

0.引言

校园网是通过网页进行连接的,但是我自己的主机不太方便携带,离了学校想跑一些深度学习的代码比较麻烦,在学校的主机是可以不关机的,但是校园网到了早上会断,因此萌发了用脚本让主机自动联网的想法,方便使用远程软件控制电脑。参考了一些其他学校的教程,方法都大同小异,下面以汕大的校园网作为示例,此方法适用于插学校网线的情况。

1.前期准备

1.配置好python环境,这里采用的是python 3.8版本
2.用pycharm进行开发
3.用于登录的浏览器一个,这里用的edge浏览器

2.分析STU的登录页面

请添加图片描述

打开之后,按F12打开开发人员工具,选到“网络”,再把保留日志给勾上,像这样在这里插入图片描述
接着输入用户名和密码并且点击登录,就能看到右侧多出一个login.php ,可以看到登录时用的是post请求,我们需要做的就是模拟这个Request Headers
在这里插入图片描述
在这里插入图片描述
点负载可以看到post请求中提交的用户名和密码
在这里插入图片描述

3.安装相关库和编写脚本

3.1安装相关库

打开Pycharm

先创建一个新项目Network,用于后续编写代码

注意:我们需要用到 requests 和 pyinstaller 这两个库,如果你没下载,可以按照下面提供的方法下载好

requests 这个库主要是用来向目标网页发送请求

pyinstaller 这个库用来将我们写好的代码打包成类似于 .exe 的可执行程序

下面是两种下载方法(任选其一即可)

方法一:可以在 cmd 下使用命令下载安装:

按下 WIN+R 组合键,然后在弹出的窗口中输入 cmd ,再按下回车
在 cmd 中输入:pip3 install requests
然后回车即可,等待下载完成
在 cmd 中输入:pip3 install pyinstaller
方法二:可以在 Pycharm 里安装这些库
在setting中找到Interreter再点击右边的 + 号找到pyinstaller并安装, requests包同理
请添加图片描述

3.2 编写代码

import requests
import datetime
# 校园网地址
post_addr = "https://a.stu.edu.cn/ac_portal/login.php"

# 下面两个大括号里面都是复制自己学校校园网登录网站中的,冒号两边都要加上双引号
post_header = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Connection': 'keep-alive',
    'Content-Length': '70',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Host': 'a.stu.edu.cn',
    'Origin': 'https://a.stu.edu.cn',
    'Referer': 'https://a.stu.edu.cn/ac_portal/20170602150308/pc.html?template=20170602150308&tabs=pwd&vlanid=0&_ID_=0&switch_url=&url=',
    'Sec-Ch-Ua': '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
    'Sec-Ch-Ua-Mobile': '?0',
    'Sec-Ch-Ua-Platform': '"Windows"',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
    'X-Requested-With': 'XMLHttpRequest',
}

post_data = {
    'opr': 'pwdLogin',
    'userName': '',# 换成自己的用户名
    'pwd': '',    # 换自己的密码
    'ipv4or6': '',
    'rememberPwd': '0',
}
response = requests.post(url, data, headers=header).status_code  # POST 方式向 URL 发送表单,同时获取状态码
print("状态码{}".format(response))  # 打印状态码

以上代码参考了自动登录校园网脚本(Python实现),但运行时出现了报错,错误信息显示我们模拟的post请求被拒绝,因为SSL证书无法通过验证。
请添加图片描述
问了下GPT,有两种方法一种是更新证书,一种是直接忽略SSL证书验证,这里选择忽略,笔者用到现在其实没什么问题。修改后的代码如下:

import requests
import datetime
# 校园网地址
post_addr = "https://a.stu.edu.cn/ac_portal/login.php"

# 下面两个大括号里面都是复制自己学校校园网登录网站中的,冒号两边都要加上双引号
post_header = {
    'Accept': '*/*',
    'Accept-Encoding': 'gzip, deflate, br',
    'Accept-Language': 'zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6',
    'Connection': 'keep-alive',
    'Content-Length': '70',
    'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8',
    'Host': 'a.stu.edu.cn',
    'Origin': 'https://a.stu.edu.cn',
    'Referer': 'https://a.stu.edu.cn/ac_portal/20170602150308/pc.html?template=20170602150308&tabs=pwd&vlanid=0&_ID_=0&switch_url=&url=',
    'Sec-Ch-Ua': '"Not_A Brand";v="8", "Chromium";v="120", "Microsoft Edge";v="120"',
    'Sec-Ch-Ua-Mobile': '?0',
    'Sec-Ch-Ua-Platform': '"Windows"',
    'Sec-Fetch-Dest': 'empty',
    'Sec-Fetch-Mode': 'cors',
    'Sec-Fetch-Site': 'same-origin',
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0',
    'X-Requested-With': 'XMLHttpRequest',
}

post_data = {
    'opr': 'pwdLogin',
    'userName': '',# 换成自己的用户名
    'pwd': '',    # 换自己的密码
    'ipv4or6': '',
    'rememberPwd': '0',
}
    print("未联网,启动联网脚本")
    # 这里放置未联网时的处理代码
    try:
        response = requests.post(post_addr, data=post_data, headers=post_header, verify=False)
        print(response.text)
    except requests.exceptions.SSLError as e:
        print("SSL证书验证失败:", e)
        info = "ssl fail"
    print("连接成功,按任意键以退出")
    info = "connect success"

接着回到1.1.1.2页面注销登录,接着右键运行get_link。
再进入登录界面可以发现已经通过认证了。至此,最主要的功能已经实现了,接下来就是打包程序再进行持久化操作。
在这里插入图片描述

由于网络有时候会自己断掉,所以需要让脚本检测是否联网并执行登录联网操作。

3.3 打包代码

在pycharm中使用如下命令打包get_link.py
pyinstaller -F get_link.py
请添加图片描述

等待它打包完成即可

完成后会像这样多出一个文件夹dist请添加图片描述

请添加图片描述
在 dist 目录下就有一个 get_link.exe 程序:

你可以像刚才那样断开校园网然后运行这个 .exe 程序看看能否正常登录校园网

这样我们就把我们写的代码打包好了
请添加图片描述
下面开始介绍如何在电脑开机时就运行这个可执行程序,并且让程序隔一段时间就连接一次。

3.4 持久化操作

Schtask命令是Windows操作系统中用来创建、删除、查询、更改系统计划任务的命令行工具。当您使用schtask创建一个计划任务时,这个任务会按照您设置的时间和条件执行。即使电脑关机或重启,只要设置了相应的触发条件,这些任务在电脑启动后仍然会按计划执行。
1、win+R打开cmd,如下命令创建定时任务InternetConnection

schtasks /create /sc HOURLY /tn "InternetConnection" /tr "\"C:\Users\Administrator\PycharmProjects\Network\src\dist\get_link.exe\""

注: /tr 后面的路径换成你自己的exe程序所在路径。

2、查看创建好的任务

schtasks /query /tn "InternetConnection" 请添加图片描述
schtasks创建的任务好像不受主机关机重启的影响,鉴于我自己的主机目前一直没关机,有条件的同学可以自己测试下主机重启后脚本是否还会自动运行。
至此,大功告成,相关的代码放在这里了。有需要的可以自取
STU_AutoConnection

  • 21
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值