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

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

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

校园网认证账号是自己的学号,认证密码是加密后的256位密文,我们可以通过运行下面的python脚本获取密文。

1.1 获取密码步骤

未联网(如果已联网请先下线)的机器上,将下面这段python代码中的password替换为你自己的密码明文,保存运行后得到密文。

import math
import requestspassword = '你的密码明文'
e = '010001'
m = '94dd2a8675fb779e6b9f7103698634cd400f27a154afa67af6166a43fc26417222a79506d34cacc7641946abda1785b7acf9910ad6a0978c91ec84d40b71d2891379af19ffb333e7517e390bd26ac312fe940c340466b4a5d4af1d65c3b5944078f96a1a51a5a53e4bc302818b7c9f63c4a1b07bd7d874cef1c3d4b2f5eb7871'
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'm = int.from_bytes(bytearray.fromhex(m), byteorder='big')
e = int.from_bytes(bytearray.fromhex(e), byteorder='big')
login_page_url = requests.get(url_index).text.split('\'')[1]
query_string = login_page_url.split('?')[1]query_list = query_string.split('&')
for i in query_list:query_item = i.split('=')if query_item[0] == 'mac':mac = query_item[1]plaintext = password + '>' + mac
plaintext = plaintext.encode('utf-8')input_nr = int.from_bytes(plaintext, byteorder='big')
crypted_nr = pow(input_nr, e, m)
keylength = math.ceil(m.bit_length() / 8)
crypted_data = crypted_nr.to_bytes(keylength, byteorder='big')
print(crypted_data.hex())

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

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

本文保存的路径如下,请把后文中所有出现的此路径替换为你自己的路径
/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: python脚本中的e和m是怎么获得的,需要修改吗?
A: 这两个变量是rsa加密需要的,一般不需要修改。如果脚本失效,可以尝试通过开发者工具获取认证界面信息(method=pageInfo)

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.mzph.cn/news/650631.shtml

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

相关文章

单片机学习笔记---独立按键控制LED显示二进制

这节我们来实现独立按键的第三个功能&#xff0c;独立按键控制LED显示二进制 新创建一个工程文件&#xff0c;然后上来我们就要把基本框架写好&#xff0c;这是基本的习惯 老规矩&#xff0c;然后把Delay 1ms的代码复制过来 复制过来后改造一下&#xff1a; 把1ms删掉&#x…

数据结构和算法笔记5:堆和优先队列

今天来讲一下堆&#xff0c;在网上看到一个很好的文章&#xff0c;不过它实现堆是用Golang写的&#xff0c;我这里打算用C实现一下&#xff1a; Golang: Heap data structure 1. 基本概念 满二叉树&#xff08;二叉树每层节点都是满的&#xff09;&#xff1a; 完全二叉树&a…

微信小程序(十二)在线图标与字体的获取与引入

注释很详细&#xff0c;直接上代码 上一篇 新增内容&#xff1a; 1.从IconFont获取图标与文字的样式链接 2.将在线图标配置进页面中&#xff08;源码&#xff09; 3.将字体配置进页面文字中&#xff08;源码&#xff09; 4.css样式的多文件导入 获取链接 1.获取图标链接 登入…

ABAP 状态栏排除某些按钮

ABAP 状态栏排除某些按钮 GUI State状态栏 在状态栏这里有这些按钮&#xff0c;现在在导出界面要排除掉这些按钮&#xff1a; 将要排除的按钮追加到gt_code内表&#xff1a; gt_fcode功能码内表的定义 DATA:gt_fcode TYPE TABLE OF sy-ucomm,完整程序 *&---------…

上位机图像处理和嵌入式模块部署(python opencv)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们谈到了qt&#xff0c;谈到了opencv&#xff0c;也谈到了嵌入式&#xff0c;但是没有说明python在这个过程当中应该扮演什么样的角色。open…

【Linux】Linux进程间通信

Linux进程间通信 一、进程间通信介绍1、概念2、进程间通信目的3、进程间通信的本质4、进程间通信分类 二、管道1、什么是管道2、匿名管道&#xff08;1&#xff09;匿名管道原理&#xff08;2&#xff09;pipe函数&#xff08;3&#xff09;匿名管道的使用步骤i、父进程调用pip…

【汇总】解决Spring-Web与Spring-WebFlux冲突

【汇总】解决Spring-Web与Spring-WebFlux冲突 问题发现问题解决问题一&#xff1a;The bean requestMappingHandlerMapping, defined in class path resource [org/springframework/web/reactive/config/DelegatingWebFluxConfiguration.class],问题二&#xff1a;The Java/XML…

贝叶斯增量式跨域适应:少样本 + 跨模态学习 + 知识保留和推断【fundus + OCT】,做视网膜病变

贝叶斯深度学习&#xff1a;增量式少样本学习跨域适应 贝叶斯多目标函数 跨模态学习 fundus OCT&#xff0c;做视网膜病变 核心思想设计网络&#xff1a;寻找分类模型、损失函数实验结果混淆矩阵与注意力图评估 总结 核心思想 论文&#xff1a;https://arxiv.org/pdf/2110.…

数学建模-------误差来源以及误差分析

绝对误差&#xff1a;精确值-近似值&#xff1b; 举个例子&#xff1a;从A到B&#xff0c;应该有73千米&#xff0c;但是我们近似成了70千米&#xff1b;从C到D&#xff0c;应该是1373千米&#xff0c;我们近似成了1370千米&#xff0c;如果使用绝对误差&#xff0c;结果都是3…

代码随想录算法训练营第32天 | 122.买卖股票的最佳时机II + 55. 跳跃游戏 + 45.跳跃游戏II

今日任务 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II 122.买卖股票的最佳时机II - Medium 题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 给你一个整数数组 prices &#xff0c;其中 prices[i] 表示某支股票第 i…

在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作

前言&#xff1a;什么是操作筛选器 操作筛选器是 ASP.NET Core Web API 中的一种过滤器&#xff0c;用于在执行控制器操作&#xff08;Action&#xff09;之前或之后执行一些代码&#xff0c;完成特定的功能&#xff0c;比如执行日志记录、身份验证、授权、异常处理等通用的处…

Java多线程--线程的生命周期

文章目录 一、JDK1.5之前&#xff1a;5种状态五种状态1、新建2、就绪3、运行4、阻塞5、死亡 二、JDK1.5及之后&#xff1a;六种状态 Java语言使用 Thread类及其子类的对象来表示 线程&#xff0c;在它的一个完整的生命周期中通常要经历如下一些状态。 一、JDK1.5之前&#xf…

搜狐新闻客户端使用Kotlin之后对JSON解析框架的探索

本文字数&#xff1a;7488字 预计阅读时间&#xff1a;45分钟 01 引言 自2017年Google发布Kotlin语言之后&#xff0c;Android开发由原来的Java开始向Kotlin过度&#xff0c;目前绝大部分Android开发岗位基本要求就是熟练使用Kotlin。事实上&#xff0c;很多有着多年历史的项目…

CAD-autolisp(二)——选择集、命令行设置对话框、符号表

目录 一、选择集1.1 选择集的创建1.2 选择集的编辑1.3 操作选择集 二、命令行设置对话框2.1 设置图层2.2 加载线型2.3 设置字体样式2.4 设置标注样式&#xff08;了解即可&#xff09; 三、符号表3.1 简介3.2 符号表查找3.2 符号表删改增 一、选择集 定义&#xff1a;批量选择…

【广度优先搜索】【拓扑排序】【C++算法】913. 猫和老鼠

作者推荐 【动态规划】【map】【C算法】1289. 下降路径最小和 II 本文涉及知识点 广度优先搜索 拓扑排序 逆推 LeetCode913. 猫和老鼠 两位玩家分别扮演猫和老鼠&#xff0c;在一张 无向 图上进行游戏&#xff0c;两人轮流行动。 图的形式是&#xff1a;graph[a] 是一个列…

List使用addAll()方法报错

当使用Arrays.asList方式创建出来的list&#xff0c;在使用addAll方法的时候报错如下&#xff1a; Exception in thread "main" java.lang.UnsupportedOperationException 这个问题记录下&#xff0c;以防以后忘记。 下面是代码 List<String> objects new A…

风口抓猪-借助亚马逊云科技EC2服务器即刻构建PalWorld(幻兽帕鲁)私服~~~持续更新中

Pocketpair出品的生存类游戏《幻兽帕鲁》最近非常火&#xff0c;最高在线人数已逼近200万。官方服务器亚历山大&#xff0c;游戏开发商也提供了搭建私人专用服务器的方案&#xff0c;既可以保证稳定的游戏体验&#xff0c;也可以和朋友一起联机游戏&#xff0c;而且还能自定义经…

LeetCode:1706. 球会落何处(Java 模拟)

目录 1706. 球会落何处 题目描述&#xff1a; 实现代码与解析&#xff1a; 原理思路&#xff1a; 1706. 球会落何处 题目描述&#xff1a; 用一个大小为 m x n 的二维网格 grid 表示一个箱子。你有 n 颗球。箱子的顶部和底部都是开着的。 箱子中的每个单元格都有一个对角线…

如何实现无公网IP实现远程访问MongoDB文件数据库

&#x1f4d1;前言 本文主要是如何实现无公网IP实现远程访问MongoDB文件数据库的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#x…

移动Web——平面转换-平移

1、平面转换-平移 取值 像素单位数值百分比&#xff08;参照盒子自身尺寸计算结果&#xff09;正负均可 技巧 translate()只写一个值&#xff0c;表示沿着X轴移动单独设置X或Y轴移动距离&#xff1a;translateX()或translateY() <!DOCTYPE html> <html lang"en&q…