昆明理工大学校园网(卓智校园网)开机自动登录(Linux&Windows)

Zh1N1an 2024-09-19 17:07:02 阅读 92

前言

因为实验室服务器需要长期在线确保随时可以远控查看实验结果,即实验室的网络不能断,但是校园网通过手动网页登录,久了可能会自动下线,所以自己做了一个自动检测网络是否连接,未连接就自动进行登录的脚本。

一、利用Wireshark抓包工具捕获校园网Web端登录的Post信息

这一步的目的主要是了解校园网是如何登录的,昆工校园网登录是通过Web端向校园网服务器发送一个带着账号和密码的Post,我们把它解析出来自己写一个脚本,就不再需要打开浏览器登录校园网了

首先一定要以管理员方式打开

在这里插入图片描述

选择物理上连接校园网的端口

在这里插入图片描述

然后在确保未连接校园网的情况下(可以先下线)点击到登录端口并输入好账号和密码

在这里插入图片描述

然后开启wireshark抓包后立马点击登录,登录成功后立马停止抓包。

紧接着找到这么一个报文

在这里插入图片描述

就是很明显的浏览器通过POST将登录信息传递给校园网服务器地报文,我们双击打开

在这里插入图片描述

我们就可以知道,校园网时通过发送这些报文信息去登录的,我们大可模拟这一份报文发送给校园网服务器登录即可,但是经过我的测试,校园网的后台登录验证,只需要上述画圈的五个信息,其他信息为空也可以,所以在下一章节写脚本的时候,我只传入了这五个信息。

前两个

“username”: userName,

“pwd”: password,

就是校园网的账号密码

“validCodeFlag”: “false”,

这一个标签是跳过验证码

“nasip”: nasip,

“wlanuserip”: wlanuserip

这两个是最关键的,我没有去深究具体这两个代表的是什么,但是在不同的机器上登录校园网,所需要传输给校园网后台的具体信息也不一样,这也是为什么需要抓包工具的原因,比如我现在需要的是实验室的服务器登录校园网,那我就必须手动登录一次校园网,并且通过抓包工具将这两个信息给获取到,然后通过以下python去模拟网页登录校园网,不同的机器这个信息是不一样的,或许是不同的网口这个信息也是不一样的。

二、利用抓包得到的信息写出Python脚本

<code>import os

import requests

def Connect_Campus_Net(userName, password, nasip, wlanuserip):

url = "http://222.197.192.59:9090/zportal/login/do"

# 昆工校园网POST请求只验证以下数据就可登录成果(请求头都不验证0.0)

data = { "username": userName,

"pwd": password,

"validCodeFlag": "false",

"nasip": nasip,

"wlanuserip": wlanuserip}

try:

res = requests.post(url=url, data=data, timeout=5)

# 若返回的状态代码为22(即正常情况)

if (res.status_code == 200):

res_j = res.json()

# 返回内容若是success,则登录成功

if (res_j['result'] == "success"):

print("The campus network login was successful!")

# 返回内容若是online,则说明已经登录上校园网

elif (res_j['result'] == "online"):

print("The campus network is already online and there is no need to log in again!")

# 输出其他情况

else:

print("Other exceptions:" + res_j)

# 输出返回的状态代码异常的情况

else:

print("Exception, request return value is" + res.status_code + "!")

# 输出代码异常情况

except:

print(

"Unable to connect to the target host, please check if the network cable is well connected or if the WiFi is connected to the lab network, you must make sure that this machine is connected to the lab's LAN first!")

def Test_Network_Connection():

while (1):

# 无限循环测试校园网是否连接 根据系统选择注释下面的命令

#exit_code = os.system('ping -n 1 www.baidu.com') # 这一行是Windows版本的ping命令

exit_code = os.system('ping -n www.baidu.com -c 1')# 这一行是Linux版本的ping命令

# 当校园网是断开的

if (exit_code != 0):

# 输出提示并开始自动连接校园网

print(

'Detects that the campus network is offline and begins to automatically connect to the campus network!')

Connect_Campus_Net(userName, password, nasip, wlanuserip)

else:

# 校园网正常在线

print("The campus network is normally online!")

if __name__ == '__main__':

userName = "***" # 1.校园网账号

password = "***" # 2.校园网密码

# 以下数据的nasip和wlanuserip需要自行斟酌,在抓包工具中的POST请求data中查阅(此为计重318实验室的数据)

nasip = "***"

wlanuserip = "***"

Test_Network_Connection()

在这个脚本中,我并没有将抓包得到的所有信息都加入其中而仅仅是

data = {"username": userName, "pwd": password, "validCodeFlag": "false", "nasip": nasip, "wlanuserip": wlanuserip}

五个属性,这是因为,我将这些信息全部尝试了一遍,一个一个的删除发现,校园网只需要有这个五个信息传到后台即可验证成功。

def Test_Network_Connection():函数中,因为Linux和Windows的系统命令时不一样的,所以这里写了两行代码,当前的python脚本时用在Linux下的,所以将Windows的命令给注释掉了。

其他代码详细内容均在注释中已写明清楚

三、在Linux下设置开机启动此脚本进行监控并登录(以Ubuntu为例)

将脚本上传进服务

为了方便我们先进入root账户su root,如果不知道本服务器的root密码可以用sudo加以下命令进行。

将上述所写好的318_campus_net_autoconnect_Lin.py脚本上传到服务器

为了方便我将其放在根目录下的/FzxAutoConnectCampusNet/文件夹下

在这里插入图片描述

撰写服务器的服务

我们通过撰写一个Linux的服务<code>CampusNet_Auto.service,让此服务进行开机启动运行这个Python脚本

[Unit]

Description=CampusNet Auto Service

After=network.target

[Service]

ExecStart=/usr/bin/python3 /FzxAutoConnectCampusNet/318_campus_net_autoconnect_Lin.py

WorkingDirectory=/FzxAutoConnectCampusNet

Restart=always

User=root

[Install]

WantedBy=multi-user.target

【Unit】

Description=CampusNet Auto Service

指的是此服务的描述,即校园网自动登录服务

After=network.target

指定服务启动的顺序,相当于它表示在网络目标 (network.target) 启动之后才启动这个服务。我的浅显理解是作为一个前置条件,属于固定写法。【Service】

ExecStart=/usr/bin/python3 /FzxAutoConnectCampusNet/318_campus_net_autoconnect_Lin.py

这一句就是定义了当前服务启动的命令,而这里的意思就是,利用python运行/FzxAutoConnectCampusNet/目录下的318_campus_net_autoconnect_Lin.py文件,也就是我们在上一节写好的Python脚本

WorkingDirectory=/FzxAutoConnectCampusNet

指定服务执行时的工作目录。即在运行上述 Python 脚本时,当前工作目录是/FzxAutoConnectCampusNet/

Restart=always

指定服务在退出后应如何处理。always 表示无论服务是因什么原因退出,都会自动重新启动。因为我们是需要此服务常驻后台进行检测校园网是否断连,断连需要立马重新登录,所以关键词为always

User=root

指定运行服务的用户。这里指定为 root,即以超级用户的权限运行该服务,确保脚本运行时不会因为权限问题从而终止。【Install】

WantedBy=multi-user.target

指定服务在何时启动。multi-user.target 表示该服务将被配置为在多用户模式下启动,通常表示系统在启动到完整的多用户模式(无图形界面)时会启动这个服务。

进入系统服务的文件夹下/etc/systemd/system/

通过vi新建一个后缀是.service的文件CampusNet_Auto.service也就是我们的服务

在这里插入图片描述

将写好的服务详细内容复制进服务器

在这里插入图片描述

再次检查,python路径(这里是/usr/bin/python3)和脚本的路径是否准确然后<code>:wq保存

再次检查,我们写好的服务是否已经出现在系统文件夹中ls -l /etc/systemd/system/ | grep CampusNet_Auto

在这里插入图片描述

如果能查找到这个服务说明文件已经写好了

配置服务自动运行

通过三行语句将服务完全启动并判断是否正常运行

<code>systemctl enable CampusNet_Auto.service 设置开机启动

systemctl start CampusNet_Auto.service 启动服务

systemctl status CampusNet_Auto.service查看服务情况

在这里插入图片描述

就可以看见脚本正常输出,在ping baidu.com 这个网址,若是网络连通则不做任何事情,当检测到无法ping通baidu.com的时候,会自动根据脚本填写的信息登录校园网

至此整个在Ubuntu服务器上配置一个开机自启的校园网登录监控程序已经完毕,可以尝试重启服务器,或者在校园网后台主动下线此服务器,均会自动快速地重新登录校园网

四、关于Windows

Windows首先就是将上述讲到的Python脚本中的os命令换成Windows的,然后想办法将此Python文件再开机以后自动后台运行,这方面的具体的我并未实施,因为服务器都是Linux的非图形化界面,但是Windows命令也已在Windows下调试成功,如何将其开机以后自动后台运行,就自行百度啦。



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。