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

news2024/11/16 0:05:00

本文提供了一个用于无图形界面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}" ]; then
        auth_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,获取失败说明网络不通
do
    code=$(curl -I ${captive_server} -s | grep "HTTP/1.1" | awk '{print $2}')
    if [ -z "${code}" ]; then
        sleep 2s
    else
        break
    fi
done
if [ -z "${code}" ]; then
    echo 连接失败,请检查:$'\n'1. 校园网是否正常/是否插好网线$'\n'2. 电脑代理是否正确设置(可以尝试关闭代理)
    exit 1;
fi
for ((i=0; i<5; i++)) #5次连接校园网,连接失败说明账号密码不对或此脚本已失效
do
    if [ "${code}" = "200" ]; then
        echo${i}次尝试连接
        login ${id} ${passwd}
    elif [ "${code}" = "204" ]; then
        echo 连接成功
        exit 0;
    fi
    sleep 2s
    code=$(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的使用方法

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面试题之RocketMq

1. RocketMq的组成及各自的作用&#xff1f; 在RocketMq中有四个部分组成&#xff0c;分别是Producer&#xff0c;Consumer&#xff0c;Broker&#xff0c;以及NameServer&#xff0c;类比于生活中的邮局&#xff0c;分别是发信者&#xff0c;收信者&#xff0c;负责暂存&#…

C#学习(十)——WPF重构与美化

一、Entity Framework Core 特点&#xff1a;【跨平台】&#xff0c;【建模】&#xff0c;【查询、更改、保存】&#xff0c;【并发】&#xff0c;【事务】&#xff0c;【缓存】&#xff0c;【数据迁移】 EF的组件 二、重构&#xff1a;构建数据模型 项目延续C#学习(九)的 项…

【GitHub项目推荐--生成你的马赛克风格头像】【转载】

这个开源项目有意思&#xff0c;这是一个利用各种其他更小的图像来创建新图像的工具&#xff0c;小的图像包括圆圈、线条、波浪、十字绣、积木、Minecraft 积木、回形针、字母等&#xff0c;所以通过这些小图像开生成的新图像的可能性是无限的。 所以&#xff0c;它与其他马赛…

微信小程序(十四)分包和分包预加载

注释很详细&#xff0c;直接上代码 新增内容&#xff1a; 1.分包的配置 2.分包预加载的写法 先说说为什么需要分包&#xff1a; 小程序追求小而快&#xff0c;主包的大小控制是小程序上线的硬性要求&#xff0c;分包有利于小程序优化加载速度 分包的注意事项&#xff1a; 单个分…

Sulfo-Cy3-dCTP,Sulfo Cyanine3 dCTP,能够发出高强度的荧光信号

您好&#xff0c;欢迎来到新研之家 文章关键词&#xff1a;Sulfo-Cy3-dCTP&#xff0c;Sulfo Cyanine3 dCTP&#xff0c;磺化-Cy3-dCTP&#xff0c;Sulfo-Cyanine3-dCTP 一、基本信息 产品简介&#xff1a;Sulfo Cy3 dCTP, a water-soluble cyanine dye CY3 labeled dCTP, i…

链表OJ---排序链表

https://leetcode.cn/problems/7WHec2/description/ //合并 struct ListNode* merge_link(struct ListNode* head1, struct ListNode* head2) {struct ListNode* temhead malloc(sizeof(struct ListNode));temhead->val 0;struct ListNode *tmp temhead, *cur1 head1, *…

Endnote中文献数据库的整体导出迁移,以及导入到新计算机具体步骤-以Endnote X8为例

Endnote中文献数据库的整体导出迁移&#xff0c;以及导入到新计算机具体步骤-以Endnote X8为例 在学习和研究中&#xff0c;有时会使用文献管理工具Endnote会积累一些重要的文献&#xff0c;当对某个问题进行了深入研究后&#xff0c;可能会积累成百上千的文献及其文献批注等。…

【GitHub项目推荐--网站归档平台】【转载】

ArchiveBox&#xff1a;网站归档平台 ArchiveBox 是基于 Python 的强大网页归档解决方案&#xff0c;可以自动把网页变成静态页面&#xff08;HTML、PDF、图片&#xff09;&#xff0c;并自动提取和保存文本、音频等内容&#xff0c;可以用来做镜像站、档案馆、离线阅读等。 开…

笔记本外接显示器的配置方法

目录 第一步 点击左下角&#xff0c;选择“设置” 第二步 选择系统&#xff0c;默认进入屏幕页面&#xff0c;页面往下拉&#xff0c;找到多显示器下拉框 前提&#xff1a;插好显示器的电源插头且插上笔记本HDMI线 第一步 点击左下角&#xff0c;选择“设置” 第二步 选择系…

探索 XMLHttpRequest:网页与服务器的异步通信之道(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

gin路由篇

1. 基本路由 gin 框架中采用的路由库是基于httprouter做的 import ("net/http""github.com/gin-gonic/gin" )func main() {// 1.创建路由r : gin.Default()// 2.绑定路由规则&#xff0c;执行的函数// gin.Context&#xff0c;封装了request和responser.…

C++内存泄漏检测工具

在程序中增加相应的内存检测工具 #define CRTDBG MAP ALLOC #include <stdlib.h> #include <crtdbg.h> #ifdef DEBUG #ifndef DBGNEW #define DBG_NEW new (_NORMAL_BLOCK&#xff0c;_FILE_LINE_) #define new DBG NEW #endif #endif _CrtDumpMemoryLeaks(); …

linux条件判断练习

1.实现自动生成相应的压缩包 1.写一个脚本&#xff0c;完成如下功能 传递一个参数给脚本&#xff0c;此参数为gzip、bzip2或者xz三者之一&#xff1b; (1) 如果参数1的值为gzip&#xff0c;则使用tar和gzip归档压缩/etc目录至/backups目录中&#xff0c;并命名为/backups/etc-…

2024年图像处理与大数据信息应用国际会议(ICIPCDIA 2024)

2024年图像处理与大数据信息应用国际会议(ICIPCDIA 2024) 2024 International Conference on Image Processing and Big Data Information Applications(ICIPCDIA 2024) 数据库&#xff1a;EI,CPCI,CNKI,Google Scholar等检索 一、【会议简介】 ​2024年图像处理与大数据信息应…

李宏毅《机器学习 深度学习》简要笔记(一)

一、线性回归中的模型选择 上图所示&#xff1a; 五个模型&#xff0c;一个比一个复杂&#xff0c;其中所包含的function就越多&#xff0c;这样就有更大几率找到一个合适的参数集来更好的拟合训练集。所以&#xff0c;随着模型的复杂度提高&#xff0c;train error呈下降趋势…

专业130+总分420+上海交通大学819考研经验分享上海交大电子信息与通信工程

今年专业课819信号系统与信息处理&#xff08;ss和dsp&#xff09;130&#xff0c;总分420&#xff0c;如愿梦圆交大&#xff0c;以下总结了自己这一年专业课&#xff0c;基础课复习经历&#xff0c;希望对大家复习有所帮助。专业课819信号系统与信号处理&#xff1a; 交大819…

Redisson 分布式锁解决主从一致性问题的原理

目录 一、主从不一致产生原因 二、Redisson 解决主从一致性的原理 一、主从不一致产生原因 1. Redis 主从集群&#xff1a;主从读写分离&#xff0c;主节点将数据同步给从节点 主节点&#xff1a;增删改从节点&#xff1a;读 2. 主从同步存在延迟&#xff0c;若主节点宕机…

基于Python Django的大数据招聘数据分析系统,包括数据大屏和后台管理

基于Python Django的大数据招聘数据分析系统是一个综合利用大数据技术和数据可视化技术的招聘行业解决方案。该系统旨在帮助企业和招聘机构更好地理解和分析招聘市场的趋势和变化&#xff0c;从而提高招聘效率和质量。 首先&#xff0c;该系统提供了一个强大的后台管理功能&am…

数据结构之受限线性表

受限线性表 对于一般线性表&#xff0c;虽然必须通过遍历逐一查找再对目标位置进行增、删和查操作&#xff0c;但至少一般线性表对于可操作元素并没有限制。说到这里&#xff0c;大家应该明白了&#xff0c;所谓的受限线性表&#xff0c;就是可操作元素受到了限制。 受限线性表…

【数据库连接】连接sqlite3报错:go-sqlite3 requires cgo to work. This is a stub

报错信息 register db Ping default, Binary was compiled with ‘CGO_ENABLED0’, go-sqlite3 requires cgo to work. This is a stubWindows解决办法 新建环境变量 新报错 Failed to build the application: # runtime/cgo cgo: C compiler “gcc” not found: exec: “gc…