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

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

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

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

  • 中国矿业大学

准备工作

需要:

  • 硬件:

    • 新华三NX30Pro路由器、两条网线、可插网线的电脑

    • 旧路由器(可选)

      1. 如果旧路由器工作正常。网线 1 一端连接 旧路由器 的 LAN 口,对端连接 华三 的 WAN 口;网线 2 一端连接 华三 的 LAN 口,对端连接电脑的网口
      2. 如果旧路由器无法工作。网线 1 一端连接 华三 的 WAN 口,对端连接宽带;网线 2 一端连接 华三 的 LAN 口,对端连接电脑的网口
  • 软件:

    • PuTTY(用于SSH连接)、浏览器(推荐使用Firefox、Chrome、Edge)、TFTP工具(用于刷写固件)

    • 启用电脑的 Telnet 服务:
      在Windows上启用Telnet服务,你可以按照以下步骤操作:

      1. 打开“控制面板”。
      2. 点击“程序”。
      3. 在“程序和功能”部分点击“打开或关闭Windows功能”。
      4. 在弹出的窗口中,找到并勾选“Telnet客户端”。
      5. 点击“确定”按钮。
      • PS:启用Telnet服务后,你可以使用Windows的Telnet客户端连接到路由器。但是,请注意,Telnet协议不安全,所有的内容都是明文传输,包括你的密码。因此,建议只在安全的内部网络中使用Telnet,或者使用更安全的替代品,如SSH。
  • 待刷写镜像及工具的下载:

文件名 描述 下载
openwrt-*-preloader.bin BL2 页面
OpenWrt-*-bl31-uboot.fip FIP 同上
OpenWrt-*-initramfs-recovery.itb initramfs 镜像 同上
OpenWrt-*-squashfs-sysupgrade.itb Sysupgrade 镜像 同上
Tftpd64-4.64-setup.exe TFTP 工具安装包 链接
PuTTY SSH 客户端 链接

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

刷OpenWrt

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

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

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

配置校园网自动登录

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

1. 抓取curl登录请求

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

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

以Firefox为例

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

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

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

2. 编写登录脚本

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

1
2
opkg update
opkg install curl

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

1
2
3
mkdir /root/auto_login
cd /root/auto_login
vi login.sh

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/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" \

给脚本运行权限:

1
chmod +x login.sh

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

1
./login.sh

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

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

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

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

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

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

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

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

1
2
cd /root/auto_login
vi network_check.sh

然后输入以下内容:

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/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,保存退出。

给脚本运行权限:

1
chmod +x ping.sh

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

1
./ping.sh

2.2 crontab定时任务

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

编辑 /etc/crontabs/root文件:

1
vi /etc/crontabs/root

在文件中添加以下内容:

1
2
3
4
5

@reboot /root/auto_login/network_check.sh

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

  • @reboot表示开机自启,执行 /root/auto_login/network_check.sh脚本。

  • * 7-23 * * *表示每天的7点到23点每分钟执行一次 network_check.sh脚本。可以根据自己的需求修改。

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

1
/etc/init.d/cron status

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

1
/etc/init.d/cron start

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

1
/etc/init.d/cron enable

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

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

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

2.3 带日志的网络检测脚本

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#!/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

参考链接