Skip to content
HeZzz
Go back

关于OpenWrt路由器及哆点Drcom校园网WEB自动登录

最近买了新华三NX30Pro路由器(下文简称”华三”),我的需求就是千兆、能刷OpenWrt进行二次开发,WIFI6这些。而华三满足这些,且价格合适,所以就入手了。这里记录一下路由器的一些配置和使用。

哆点Drcom校园网认证系统为广州热点软件科技股份有限公司研发,若你的校园网登录界面有本计费系统由广州热点软件科技股份有限公司提供字样,那么你可以参考这篇文章。

目前已知使用此系统大学:

准备工作

需要:

文件名描述下载
openwrt-*-preloader.binBL2页面
OpenWrt-*-bl31-uboot.fipFIP同上
OpenWrt-*-initramfs-recovery.itbinitramfs 镜像同上
OpenWrt-*-squashfs-sysupgrade.itbSysupgrade 镜像同上
Tftpd64-4.64-setup.exeTFTP 工具安装包链接
PuTTYSSH 客户端链接

⚠️ 为了避免无线局域网的干扰,可以暂时将电脑的无线网络断开。

刷OpenWrt

到手之后简单看了一下原厂固件。发现并不能满足我校园网自动登录的需求,所以就决定刷OpenWrt。

按照Eric的文章一步一步来,最终成功刷入。

PS:刷入的时候还是需要网络的,可以留着之前的路由器,然后分出一个lan口插入华三的wan口,这样既可以配置也可以联网。还有就是我没有刷入主题,这部分应该是无关紧要,各位自行判断。

配置校园网自动登录

我们的校园网是需要登录的,而OpenWrt默认并没有这个功能。所以需要自己写一个脚本来实现。

1. 抓取curl登录请求

(这一步我已经帮你干完了,不感兴趣的话可以直接往下划到编写登录脚本

首先抓取登录页面的 form表单,然后用 curl发送 post请求,最后检查是否登录成功。

以Firefox为例

  1. 打开Firefox,打开校园网登录界面,按 F12打开开发者工具,切换到 网络选项卡,然后输入账号密码登陆校园网。

  2. 网络选项卡中找到 login请求

    • 通过 响应找到含有 认证成功的内容,回到 消息头,右键点击,选择 复制,然后选择 复制为cURL(bash)

2. 编写登录脚本

首先,我们需要在路由器上安装 curl,用于发送请求。 用PuTTY连接到路由器,然后输入以下命令安装 curl

opkg update
opkg install curl

来写一个自动登录的脚本。创建一个文件夹,用于存放:

mkdir /root/auto_login
cd /root/auto_login
vi login.sh

然后输入以下内容,注意修改账号密码,请按照实际情况自行测试:

#!/bin/sh

# 用户账户和密码。
# 运营商:学号后面加@unicom为中国联通,@cmcc为中国移动,@telecom为中国电信。
# 校园网登录只填学号,不填运营商。
USER_ACCOUNT="11230909@cmcc"
USER_PASSWORD="xxxxxx"

# 发送登录请求。
curl "http://10.2.5.251:801/eportal/?" \
-G \
--data-urlencode "c=Portal" \
--data-urlencode "a=login" \
--data-urlencode "login_method=1" \
--data-urlencode "user_account=${USER_ACCOUNT}" \
--data-urlencode "user_password=${USER_PASSWORD}" \

# 以下为注销,各位可自行测试。
# curl "http://10.2.5.251:801/eportal/?" \
# -G \
# --data-urlencode "c=Portal" \
# --data-urlencode "a=logout" \

给脚本运行权限:

chmod +x login.sh

然后我们可以先注销,再手动运行一下脚本,看看是否能够成功登录:

./login.sh

若是出现 认证成功及其类似字样,则说明登录成功。

至此,一个自动登录的脚本就成功了。

3. 开机自启以及断网重联

我们可以将脚本设置为开机自启,以及断网重连。 可以通过 crontab 实现。

crontab 是一个用于执行定时任务的工具。

2.1 不带日志的网络检测脚本

我们可以通过 ping命令来检测网络是否正常,如果网络不正常,我们就执行 auto_login.sh脚本。

可以直接在登录文件夹下创建一个 network_check.sh文件:

cd /root/auto_login
vi network_check.sh

然后输入以下内容:

不带日志,适用于硬盘较小设备。带日志的可以参考文章末尾代码。

#!/bin/bash

# 配置参数
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")  # 获取脚本所在目录
TARGET="baidu.com"                      # 建议使用DNS或可靠IP
LOGIN_SCRIPT="$SCRIPT_DIR/login.sh"         # 登录脚本路径(相对脚本目录)


# 检测网络连通性(3次尝试,每次超时2秒)
if ! ping -4 -c 3 -W 2 "$TARGET" &> /dev/null; then
    # 输出带时间戳
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 网络不可达,尝试校园网登录..." 
    
    # 执行登录脚本并输出
    if bash "$LOGIN_SCRIPT" 2>&1; then
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 登录脚本执行成功"
    else
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 错误:登录脚本执行失败" 
    fi

else
    # 输出带时间戳
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 网络已连接,无需登录"
    
    # 可选:执行其他操作,例如发送通知或执行其他脚本
    # bash /path/to/other_script.sh

fi

:wq,保存退出。

给脚本运行权限:

chmod +x ping.sh

然后我们可以先注销,再手动运行一下脚本,看看是否能够成功登录:

./ping.sh

2.2 crontab定时任务

接下来使用crontab,它是一个用于执行定时任务的工具,我们可以通过它来实现重连。

编辑 /etc/crontabs/root文件:

vi /etc/crontabs/root

在文件中添加以下内容:


@reboot /root/auto_login/network_check.sh

* 7-23 * * * /root/auto_login/network_check.sh

注意:我们需要查看crontab是否已经启动,如果没有启动,我们需要手动启动:

/etc/init.d/cron status

如果没有启动,我们可以通过以下命令启动:

/etc/init.d/cron start

同时,我们可以把它添加到开机自启:

/etc/init.d/cron enable

这样就可以实现断网重连了。

至此,我们就实现了校园网自动登录以及断网重连。🍾🍾🍾

若有问题,欢迎和我邮件联系HeZ2z@foxmail.com,我会尽量回复。

2.3 带日志的网络检测脚本

带日志的版本适用于硬盘较大设备,例如服务器等。 只修改 network_check.sh文件,其他部分如 login.shcrontab不变。

#!/bin/bash

# 配置参数
SCRIPT_DIR=$(dirname "$(readlink -f "$0")")  # 获取脚本所在目录
# LOG_DIR="$SCRIPT_DIR/log"                   # 日志存放目录(相对脚本目录)
# LOG_FILE="$LOG_DIR/network_$(date +'%Y-%m-%d').log"  # 按日期区分日志文件
TARGET="baidu.com"                      # 建议使用DNS或可靠IP
LOGIN_SCRIPT="$SCRIPT_DIR/login.sh"         # 登录脚本路径(相对脚本目录)

# 确保日志目录存在
mkdir -p "$LOG_DIR"

# 检测网络连通性(3次尝试,每次超时2秒)
if ! ping -4 -c 3 -W 2 "$TARGET" &> /dev/null; then
    # 记录日志带时间戳
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 网络不可达,尝试校园网登录..." >> "$LOG_FILE"
    
    # 执行登录脚本并记录输出
    if bash "$LOGIN_SCRIPT" >> "$LOG_FILE" 2>&1; then
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 登录脚本执行成功" >> "$LOG_FILE"
    else
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 错误:登录脚本执行失败" >> "$LOG_FILE"
    fi

else
    # 记录日志带时间戳
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] 网络已连接,无需登录" >> "$LOG_FILE"
    
    # 可选:执行其他操作,例如发送通知或执行其他脚本
    # bash /path/to/other_script.sh >> "$LOG_FILE" 2>&1

fi

参考链接


Share this post on:

上一篇
布隆过滤器
下一篇
转计算机专业相关