shell脚本登录dlut-lingshui并设置开机连网和断网重连

2024-01-25 07:04

本文主要是介绍shell脚本登录dlut-lingshui并设置开机连网和断网重连,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文提供了一个用于无图形界面linux系统自动连接dlut-lingshui校园网的shell脚本,并提供了设置开机联网以及断网重连的详细操作步骤。本文的操作在ubuntu 22.04系统上验证有效,在其他版本的linux系统上操作时遇到问题可以自行百度。

1. 获取校园网认证界面的用户名和密码

校园网认证账号是自己的学号,认证密码是加密后的256位密文,这个密文存储在浏览器cookie中,我们可以通过电脑图形界面辅助获取。

1.1 获取密码步骤(以谷歌浏览器为例)
  1. 打开浏览器,按“F12”进入开发者工具
  2. 地址栏输入“http://auth.dlut.edu.cn/eportal/InterFace.do?method=getOnlineUserInfo”并回车(这个网址并不唯一,总之能访问到和校园网登录沾边的页面就行)
  3. 依次在开发者工具中点击“网络”,“Interface…method=getOnlineUserInfo”,“Headers”
  4. 在“Cookie”一栏中找到储存的密码(密码以密文的形式存储)

2. 将账号密码填入shell脚本并保存

将下面这段代码中的账号密码替换为你自己的,并记住保存的路径。本文保存的路径为

/home/ubuntun/system_script/dlut_network.sh

#!/bin/bash
captive_server='http://www.google.cn/generate_204'
url_index='http://123.123.123.123/'
user_agent='Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36'id="这里输入账号"
passwd="这里输入密文"login() {login_page_url=$(curl -s "${url_index}" | grep -o '<script>[^<]*</script>' | sed -e "s/<script>\(.*\)<\/script>/\1/" | grep -o "'.*'" | sed -e "s/'//g")login_url=$(echo ${login_page_url} | awk -F \? '{print $1}')login_url="${login_url/index.jsp/InterFace.do?method=login}"query_string=$(echo ${login_page_url} | awk -F \? '{print $2}')query_string="${query_string//&/%26}"query_string="${query_string//=/%3D}"login_post_data="userId=$1&password=$2&service=&queryString=${query_string}&operatorPwd=&operatorUserId=&validcode=&passwordEncrypt=true"if [ -n "${login_url}" ]; thenauth_result=$(curl -d "${login_post_data}" -H "Accept: */*" -H "Accept-Encoding: gzip, deflate" -H "Accept-Language: zh-CN,zh\;q=0.9" -H "Proxy-Connection: keep-alive" -H "Referer: ${login_url}" -H "User-Agent: ${user_agent}" "${login_url}")# echo "${auth_result}"fi
}for ((i=0; i<5; i++)) #5次获取code,获取失败说明网络不通
docode=$(curl -I ${captive_server} -s | grep "HTTP/1.1" | awk '{print $2}')if [ -z "${code}" ]; thensleep 2selsebreakfi
done
if [ -z "${code}" ]; thenecho 连接失败,请检查:$'\n'1. 校园网是否正常/是否插好网线$'\n'2. 电脑代理是否正确设置(可以尝试关闭代理)exit 1;
fi
for ((i=0; i<5; i++)) #5次连接校园网,连接失败说明账号密码不对或此脚本已失效
doif [ "${code}" = "200" ]; thenecho 第${i}次尝试连接login ${id} ${passwd}elif [ "${code}" = "204" ]; thenecho 连接成功exit 0;fisleep 2scode=$(curl -I ${captive_server} -s | grep "HTTP/1.1" | awk '{print $2}')
done
echo 连接失败,请检查用户信息是否正确

3. 为脚本赋予权限

chmod +x /home/ubuntun/system_script/dlut_network.sh

4. 设置开机自动联网&断网自动重连

本文借助crontab工具实现开机自动联网和断网自动重连,crontab的用法可以自行百度。
以下是配置过程:

  1. 安装curl
sudo apt install curl
  1. 命令行输入crontab -e,向打开的文件追加以下两行并保存
@reboot export PATH=/usr/bin:/bin:/usr/local/bin && /home/ubuntun/system_script/dlut_network.sh
*/10 * * * * export PATH=/usr/bin:/bin:/usr/local/bin && /home/ubuntun/system_script/dlut_network.sh

第一行代表开机时运行一次脚本(开机启动)
第二行代表每隔十分钟运行一次脚本(每十分钟检查网络,断网重连)

Q&A:

Q: 密码加密后的密文和设备硬件属性有关吗?
A: 不同设备获取到的密文不同,密文应该和硬件属性有关,最好在自己设备的图形界面获取密文。(换设备好像也没什么问题)

Q: 设置了crontab后脚本依然不生效,我该如何调试?
A: 可以从以下几个方面逐一排查:

  1. 检查cron服务是否正常 service cron status
  2. 检查脚本权限设置是否正常
  3. 将程序运行的输出信息保存在日志中进一步分析。
    要把程序返回信息输出到某个文件中,只需在crontab的计划任务后面追加 >> /path/to/your/logfile.log 2>&1,例如:
@reboot export PATH=/usr/bin:/bin:/usr/local/bin && /home/ubuntun/system_script/dlut_network.sh >> /home/ubuntun/system_script/aaa.log 2>&1
*/10 * * * * export PATH=/usr/bin:/bin:/usr/local/bin && /home/ubuntun/system_script/dlut_network.sh >> /home/ubuntun/system_script/bbb.log 2>&1

Q: 为什么我可以使用curl,但脚本日志输出却提示我curl不存在?
A: 如果你使用了anaconda或其他虚拟环境管理器,并默认激活了base环境,那你使用的curl很有可能是虚拟环境中的,这种情况下有两种解决办法。
为什么我可以使用curl,但脚本日志输出却提示我curl不存在?
一种解决方法 是使用which curl查看当前curl的路径,并export这个路径:

crontab -e
#在PATH后添加这个路径,用冒号分隔
*/10 * * * * export PATH=/usr/bin:/bin:/usr/local/bin:/home/ubuntun/anaconda3/bin && /home/ubuntun/system_script/dlut_network.sh >> /home/ubuntun/system_script/bbb.log 2>&1

(推荐)另一种解决方法 是在系统安装curl(会自动安装在/usr/bin路径下):

sudo apt install curl

Q: */10 * * * * 是什么意思?
A: 请自行百度crontab的使用方法

这篇关于shell脚本登录dlut-lingshui并设置开机连网和断网重连的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


原文地址:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.chinasem.cn/article/642451

相关文章

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

linux hostname设置全过程

《linuxhostname设置全过程》:本文主要介绍linuxhostname设置全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录查询hostname设置步骤其它相关点hostid/etc/hostsEDChina编程A工具license破解注意事项总结以RHE

Python设置Cookie永不超时的详细指南

《Python设置Cookie永不超时的详细指南》Cookie是一种存储在用户浏览器中的小型数据片段,用于记录用户的登录状态、偏好设置等信息,下面小编就来和大家详细讲讲Python如何设置Cookie... 目录一、Cookie的作用与重要性二、Cookie过期的原因三、实现Cookie永不超时的方法(一)

利用Python脚本实现批量将图片转换为WebP格式

《利用Python脚本实现批量将图片转换为WebP格式》Python语言的简洁语法和库支持使其成为图像处理的理想选择,本文将介绍如何利用Python实现批量将图片转换为WebP格式的脚本,WebP作为... 目录简介1. python在图像处理中的应用2. WebP格式的原理和优势2.1 WebP格式与传统

shell中set -u、set -x、set -e的使用

《shell中set-u、set-x、set-e的使用》本文主要介绍了shell中set-u、set-x、set-e的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录✅ 1. set -u:防止使用未定义变量 作用: 示例:❌ 报错示例输出:✅ 推荐使用场景:✅ 2. se

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

Qt 设置软件版本信息的实现

《Qt设置软件版本信息的实现》本文介绍了Qt项目中设置版本信息的三种常用方法,包括.pro文件和version.rc配置、CMakeLists.txt与version.h.in结合,具有一定的参考... 目录在运行程序期间设置版本信息可以参考VS在 QT 中设置软件版本信息的几种方法方法一:通过 .pro

PostgreSQL 默认隔离级别的设置

《PostgreSQL默认隔离级别的设置》PostgreSQL的默认事务隔离级别是读已提交,这是其事务处理系统的基础行为模式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一 默认隔离级别概述1.1 默认设置1.2 各版本一致性二 读已提交的特性2.1 行为特征2.2

一文详解MySQL如何设置自动备份任务

《一文详解MySQL如何设置自动备份任务》设置自动备份任务可以确保你的数据库定期备份,防止数据丢失,下面我们就来详细介绍一下如何使用Bash脚本和Cron任务在Linux系统上设置MySQL数据库的自... 目录1. 编写备份脚本1.1 创建并编辑备份脚本1.2 给予脚本执行权限2. 设置 Cron 任务2

mtu设置多少网速最快? 路由器MTU设置最佳网速的技巧

《mtu设置多少网速最快?路由器MTU设置最佳网速的技巧》mtu设置多少网速最快?想要通过设置路由器mtu获得最佳网速,该怎么设置呢?下面我们就来看看路由器MTU设置最佳网速的技巧... 答:1500 MTU值指的是在网络传输中数据包的最大值,合理的设置MTU 值可以让网络更快!mtu设置可以优化不同的网