# Drcom校园网使用路由器过验证

分享红米AC2100的刷机过程和自动登录校园网。
<!--more-->
## 1. Redmi AC 2100 路由器选择理由

选择 Redmi AC 2100 (RM 2100) 型号的原因如下：
*   **5 G Wi-Fi 性能：** 通过刷入 Padavan (老毛子) 固件，可以开启 160 MHz 频宽，充分发挥 5 G Wi-Fi 的高速潜力。
*   **社区支持：** 在恩山无线论坛等社区有大量的讨论和刷机方案，遇到问题时更容易找到解决方案。
*   **性能满足需求：** 宿舍宽带为 500 Mbps，RM 2100 的 5 G Wi-Fi 理论速率高达 1733 Mbps，足以满足日常使用需求。
*   **对比 R3G：** 之前使用过的 R3G 路由器散热性能弱于 RM 2100，且 5 G 信号速率仅为 800 Mbps。考虑到宿舍使用对信号稳定性和性能的要求，RM 2100 是更优选择，且不打算在上面折腾过多插件。

2026-03-22 更新，宿舍的小米路由器跑不满带宽，实验室的小米路由器老是断连，家里的换货几次才能用。希望各位远离小米路由器。
## 2. 所需固件和软件

在开始刷机前，请准备好以下固件和工具：
1.  **Padavan (老毛子) 固件：** 支持开启 160 MHz 频宽。
    *   下载地址：[padavan](https://opt.cn2qq.com/padavan/)
    *   搜索 `RM 2100`，下载 `RM 2100_3.4.3.9-099.Trx` 文件。
2.  **QB-BOOT：** 适配 RM 2100 的 PB-BOOT 正式版。
    *   下载地址：[适配RM2100的pb-boot正式版（大雕）-小米无线路由器及小米网络设备-恩山无线论坛](https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=4032659&fromuid=725775)
3.  **Breed：** 由于官方 Breed 网站 ([breed.hackpascal.net](https://breed.hackpascal.net/)) 已无法访问，这里提供一个网盘链接。
    *   下载地址：[123 云盘分享](https://www.123684.com/s/rlO3jv-8s4nH)
    *   提取码：`Kzg5`
4.  **OpenWrt 固件 (带校园网检测插件)：** 可选，根据个人需求选择是否集成多播和校园网防检测插件。
    *   下载地址：[【2024-9-15】自编译Redmi AC2100固件，集成UA2F等，可用于校园网防检测等功能-小米无线路由器及小米网络设备-恩山无线论坛](https://www.right.com.cn/forum/thread-8315729-1-5.html)
5.  **官方降级包：** 用于将路由器固件降级到旧版本，以便利用漏洞注入 Breed。
    *   下载地址：[123 云盘分享](https://www.123684.com/s/rlO3jv-Ks4nH)
    *   提取码：`d8sA`

## 3. 路由器降级

为了利用旧版固件的注入漏洞，需要将路由器官方固件降级到 2.0.7 版本。
1.  登录路由器后台管理界面。
2.  上传上述准备好的“官方降级包”。
3.  路由器重启后，即完成降级。

## 4. 注入并刷入 Breed

此步骤旨在将 Breed Web 恢复控制台注入到路由器中。参考恩山论坛的方案：[小米 红米【AC2100】一键刷BREED【30秒刷完】小白帅小伙专用 检查坏块 \| 无需Telnet-小米无线路由器及小米网络设备-恩山无线论坛](https://www.right.com.cn/forum/thread-4066963-1-1.html)。

### 4.1 核心步骤

由于官方 Breed 网站无法访问，无法直接使用教程中的注入 URL。需要先下载 Breed 固件到本地，然后通过本地 HTTP 服务器提供给路由器。
1.  获取你电脑的本地 IP 地址和路由器的 IP 地址。
2.  登录路由器后台，在浏览器地址栏中找到 URL 中的 `stok` 参数值并复制下来。
3.  在你下载 Breed 固件的文件夹中，按住 `Shift` 键并右键点击空白处，选择“在此处打开 PowerShell 窗口”或“在此处打开命令窗口”，输入 `cmd` 进入命令行。
4.  **开启一个本地 HTTP 服务器：** 在命令行中执行 `python -m http.server 8080 --bind 0.0.0.0`。**请勿关闭此窗口**，它将用于向路由器提供 Breed 固件。
5.  **获取 Breed 固件的 SHA 256 值：** 在另一个命令行窗口中，执行 `certutil -hashfile breed.bin SHA256`（假设你的 Breed 固件文件名为 `breed.bin`）。
6.  **重要：** 在进行注入操作前，**务必关闭 Windows 的防火墙和杀毒软件**，以避免阻碍路由器访问本地服务器。

现在，可以拼接注入 URL。

**原始注入 URL 示例：**
```
http://【路由器的IP地址】/cgi-bin/luci/;stok=【路由器的Stok】/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=%0Acd%20%2Ftmp%0Acurl%20http%3A%2F%2F【您电脑的IP地址】%3A【HTTP服务器端口】%2F【固件文件名】%20-o%20B%0A%5B%20-z%20%22%24(sha256sum%20B%20%7C%20grep%20【固件的SHA256校验值】)%22%20%5D%20%7C%7C%20mtd%20-r%20write%20B%20Bootloader%0A
```

**URL 解码后的命令（方便理解）：**
```url解码
http://【路由器的IP地址】/cgi-bin/luci/;stok=【路由器的Stok】/api/misystem/set_config_iotdev?bssid=Xiaomi&user_id=longdike&ssid=
cd /tmp
curl http://【您电脑的IP地址】:【HTTP服务器端口】/【固件文件名】 -o B
[ -z "$(sha256sum B | grep 【固件的SHA256校验值】)" ] || mtd -r write B Bootloader
```
将拼接好的注入 URL 粘贴到浏览器地址栏并回车。

路由器会重启，指示灯将从**蓝色**变为**橙色**，最终再次变为**蓝色**，表示已进入系统。

### 4.2 进入 Breed 后台

1.  断开路由器电源。
2.  用牙签或卡针顶住路由器的 Reset 键。
3.  重新接上电源。
4.  观察指示灯：如果闪烁**蓝色**，表示已成功进入 Breed 模式；如果闪烁**橙色**，则表示进入的是原厂 UBOOT。当指示灯闪蓝时，即可松开 Reset 键。
5.  用网线将电脑连接到路由器的任意一个 LAN 口。
6.  将电脑以太网适配器的 IP 地址手动设置为 `192.168.1.100`，子网掩码设置为 `255.255.255.0`。
7.  使用浏览器（推荐无痕模式）访问 `192.168.1.1`，即可进入 Breed 后台管理界面。
    ![](https://1mg.1144514.xyz/2026/03/20260322154709090.webp)

### 4.3 摸索过程中的经验

*   **直接使用旧注入 URL 失败：** 最初尝试直接使用教程中包含的 Breed 官方网站链接进行注入，但由于网站无法访问，导致刷入失败，即使路由器返回 `code 0`。
*   **SHA 256 校验失败：** 尝试刷入 22 年的 Breed 固件时，由于其 SHA 256 值与注入代码中预设的值不符，未能通过校验，导致刷入失败。

## 5. 刷入 Padavan 固件

在成功刷入 Breed 后，直接刷入 Padavan 或 OpenWrt 固件可能会遇到问题，导致路由器无法启动新的 Wi-Fi。

### 5.1 刷入失败的排查与解决方案

我尝试直接在 Breed 中刷入 Padavan 和 OpenWrt 固件，但路由器重启后几分钟内，Wi-Fi 列表中都没有出现新的 Wi-Fi，这很可能意味着刷入失败。

通过查阅恩山论坛的帖子[[红米AC2100(rm2100)breed刷入padavan老毛子无法进入、坏块 通过breed刷入pb-boot解决-小米无线路由器及小米网络设备-恩山无线论坛]]，找到了解决方案：
*   **问题原因：** Breed 可能没有坏块检测功能，导致在有坏块的闪存上刷入固件失败。
*   **解决方案：** 需要先在 Breed 中刷入 PB-BOOT，因为 PB-BOOT 具备坏块检测功能，能更稳定地刷入固件。

### 5.2 正确的刷入 Padavan 步骤

1.  **备份固件：** 在刷入任何固件之前，强烈建议备份路由器的 EEPROM 和编程器固件。
    ![](https://1mg.1144514.xyz/2026/03/20260322154709091.webp)
2.  **在 Breed 中刷入 PB-BOOT。**
3.  **在 PB-BOOT 中刷入 Padavan (老毛子) 固件。**
    完成此步骤后，路由器成功重启，并能看到名为 `PCDN` 的 Wi-Fi 信号，表明 Padavan 固件已成功刷入。
    ![](https://1mg.1144514.xyz/2026/03/20260322154709092.webp)
4.  **双清：** 进入 Padavan 后台后，建议进行“双清”操作，以清除旧配置并确保系统稳定运行。

## 6. 通过校园网网页认证

学校对所有接入校园网的设备都要求通过网页验证。路由器接入校园网后，如果未认证，所有连接到路由器的设备都无法上网。让路由器通过认证，可以使宿舍所有设备无需单独验证即可联网。

有两种主要方法实现路由器通过校园网认证：
1.  **MAC 克隆：** 让一台电脑通过验证后，路由器克隆该电脑的 MAC 地址。此方法操作相对麻烦，但官方固件通常自带 MAC 克隆功能。
2.  **运行认证脚本：** 编写一个脚本，让路由器开机自动执行，完成网页认证。这也是我选择刷机的主要原因。

通过 F12 抓包分析发现，学校的有线和无线网络是两套独立的登录系统。登录请求均为 GET 方法。

| 特性       | 无线 Wi-Fi (eportal)    | 有线网络 (Dr. Com)    |
| :--------- | :---------------------- | :-------------------- |
| 服务器 IP  | `10.0.1.5` (801 端口)   | `10.0.1.5` (80 端口)  |
| 登录地址   | `/eportal/portal/login` | `/drcom/login`        |
| 密码格式   | Base 64 编码             | 明文                  |
| 用户名格式 | `,0,学号`               | `学号@运营商`         |
脚本的逻辑是启动后就每隔十秒循环 ping 114.114.114.114，如果 ping 失败就执行登录；
如果 ping 成功过十秒就继续 ping。

`使用前需要关闭代理，要不然会一直显示登录失败。`
### 6.1 无线登录脚本

```bash
#!/bin/bash
# --- 运营商代码 ---
# 中国联通: unicom
# 中国移动: cmcc
# 中国电信: telecom
# --------------------
# Account Information ---
USERNAME=""         # <--- 你的账号
PASSWORD=""      # <--- 你的密码
OPERATOR_CODE=""     # <--- 运营商代码(留空)

# --- End of Configuration ---

COOKIE_FILE="/tmp/drcom_cookies.txt"


if [ -n "$OPERATOR_CODE" ]; then
    FULL_USERNAME="${USERNAME}@${OPERATOR_CODE}"
else
    FULL_USERNAME="${USERNAME}"
fi

ACTIVATE_URL="http://10.0.1.5/drcom/auth_msg.php?callback=dr1002"


FAIL_COUNT=0
MAX_FAIL_ATTEMPTS=3


echo "Dr.COM Ultimate auto-login script started (with retry logic)..."

# --- Main Loop ---
while true; do
    if curl -s --connect-timeout 5 http://www.baidu.com/robots.txt | grep -q "User-agent"; then

        if [ $FAIL_COUNT -gt 0 ]; then
            echo "[INFO] Network jitter recovered. Fail count reset."
            FAIL_COUNT=0
        fi

        current_time=$(date "+%Y-%m-%d %H:%M:%S")
        echo "[${current_time}] Network is online. Sending keep-alive packet..."
        curl -s -b "$COOKIE_FILE" "$ACTIVATE_URL" -H "User-agent: Mozilla/5.0" > /dev/null

    else

        FAIL_COUNT=$((FAIL_COUNT+1))
        echo "[WARN] Network check failed! Attempt ${FAIL_COUNT}/${MAX_FAIL_ATTEMPTS}..."


        if [ $FAIL_COUNT -ge $MAX_FAIL_ATTEMPTS ]; then

            echo "[WARN] Confirmed network is down. Attempting to re-login..."
            echo "    - Login account: $FULL_USERNAME"


            FAIL_COUNT=0

            rm -f "$COOKIE_FILE"
            LOGIN_URL="http://10.0.1.5/drcom/login?callback=dr1003&DDDDD=${FULL_USERNAME}&upass=${PASSWORD}&0MKKey=123456"
            LOGIN_RESPONSE=$(curl --connect-timeout 5 -s -c "$COOKIE_FILE" "$LOGIN_URL" -H "User-Agent: Mozilla/5.0")

            if printf "%s" "$LOGIN_RESPONSE" | grep -q '"result":1'; then
                echo "[SUCCESS] Login authentication successful!"

                echo "    - Waiting 2 seconds before activation..."
                sleep 2
                curl -s -b "$COOKIE_FILE" "$ACTIVATE_URL" -H "User-agent: Mozilla/5.0" > /dev/null

                echo "    - Waiting 5 seconds for network to stabilize..."
                sleep 5

                if curl -s --connect-timeout 5 http://www.baidu.com/robots.txt | grep -q "User-agent"; then
                    echo "[SUCCESS] Network restored."
                else
                    echo "[FAIL] Network activation failed."
                fi
            else
                echo "[FAIL] Login authentication failed!"
                MSG=$(printf "%s" "$LOGIN_RESPONSE" | sed -n 's/.*"msg":"\([^"]*\)".*/\1/p')
                if [ -n "$MSG" ]; then
                    echo "    - Server response: $MSG"
                fi
                sleep 5
            fi
        else
            echo "    - Waiting for next check to confirm..."
        fi
    fi

    sleep 10
done
```

---
试过 ping 114.114.114.114 有一段时间完全 ping 失败，后面 114.114.114.114 能用后，有试过掉验证依然能 ping 成功（所以一直没执行保活），最后的版本是使用 curl baidu.com 的。

### 6.2 有线登录脚本

```bash
#!/bin/sh

(
    # --- 请在这里填入您的账号信息 ---
    USERNAME=""
    PASSWORD=""
    OPERATOR_CODE="unicom" # 运营商选项: unicom (联通), cmcc (移动), telecom (电信)
    # --- 配置结束 ---

    # 使用一个固定的Cookie文件路径
    COOKIE_FILE="/tmp/drcom_cookies.txt"

    # 构造带运营商后缀的完整用户名
    FULL_USERNAME="${USERNAME}@${OPERATOR_CODE}"

    # --- 主循环 ---
    while true; do
        # 步骤1: 在线状态检测
        if ping -c 2 -W 3 114.114.114.114 > /dev/null 2>&1; then
            # 如果ping成功，说明网络在线
            current_time=$(date "+%H:%M:%S")
            printf "[正常] 网络在线 [${current_time}]。10秒后再次检测... \r"
        else
            # 如果ping失败，说明网络已断开，执行登录流程
            echo "\n[警告] 网络已断开，正在尝试登录..."
            echo "    - 登录账号: $FULL_USERNAME"

            rm -f "$COOKIE_FILE"

            # 步骤A: 发起登录请求
            LOGIN_URL="http://10.0.1.5/drcom/login?callback=dr1003&DDDDD=${FULL_USERNAME}&upass=${PASSWORD}&0MKKey=123456"
            LOGIN_RESPONSE=$(curl -s -c "$COOKIE_FILE" "$LOGIN_URL" -H "User-Agent: Mozilla/5.0")

            if echo "$LOGIN_RESPONSE" | grep -q '"result":1'; then
                echo "[成功] 登录认证成功！"
                sleep 1

                # 步骤B: 发送激活请求
                ACTIVATE_URL="http://10.0.1.5/drcom/auth_msg.php?callback=dr1002"
                curl -s -b "$COOKIE_FILE" "$ACTIVATE_URL" -H "User-agent: Mozilla/5.0" > /dev/null

                if ping -c 2 -W 3 114.114.114.114 > /dev/null 2>&1; then
                    echo "[成功] 网络已成功激活。"
                else
                    echo "[失败] 网络激活失败，请检查认证服务器状态。"
                fi
            else
                echo "[失败] 登录失败！"
                MSG=$(echo "$LOGIN_RESPONSE" | sed -n 's/.*"msg":"\([^"]*\)".*/\1/p')
                echo "    - 服务器响应: $MSG"
            fi
        fi

        # 每次循环结束后，统一等待10秒
        sleep 10
    done
) &
```
**使用方法：**
1.  将脚本保存为 `.sh` 文件（例如 `autologin.sh`）。
2.  赋予脚本执行权限：`chmod +x <脚本名>`。
3.  根据脚本内的注释，填入你的学号、密码和运营商代码。
4.  执行脚本：`./<脚本名>`。
5. 有线登录脚本需要放入 `padavan 路由器后台` 的 `开机执行脚本` 里面。就可以在路由器通电后自动登录了。所以也是采用了硬编码的方法。

## 7. 偶遇学校断网经历

在使用 Wi-Fi 时，舍友突然断网，而我的设备仍能正常上网。

此时我仍能正常上网，且开启了代理。代理会将 DNS 请求加密并通过代理服务器发起解析（即 DoH - DNS over HTTPS）。猜测是学校的 DNS 出现了问题。

如果希望在学校 DNS 服务故障时宿舍网络仍能正常使用，可以考虑安装 AdGuard Home。在我刚安装好后，学校网络就恢复正常了，因此未能进行实际测试。下次遇到类似情况时再进行验证。

## 8. 参考资料

1. [小米 红米【AC2100】一键刷BREED【30秒刷完】小白帅小伙专用 检查坏块 \| 无需Telnet-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz!](https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=4066963&highlight=%E4%B8%80%E9%94%AE%E5%88%B7BREED%E3%80%9030%E7%A7%92%E5%88%B7%E5%AE%8C%E3%80%91)
2. [红米AC2100(rm2100)breed刷入padavan老毛子无法进入、坏块 通过breed刷入pb-boot解决-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz!](https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8436354&highlight=pb-boot)
3. [Dr.COM校园网多设备解决方案——路由器 Padavan/LuCI 固件自动网页认证+Telegram Bot 定时发送连接情况 - 虤虤豆](https://tiger.fail/archives/drcom-autologin-padavan-tgbot.html#top)

---
{.awesome-hr}

 ![](https://1mg.1144514.xyz/2026/03/20260322154709093.webp)
 ![](https://1mg.1144514.xyz/2026/03/20260322154709094.webp)
 ![](https://1mg.1144514.xyz/2026/03/20260322154709095.webp)


---

> 作者: Chifan  
> URL: https://eo.chifan.de/posts/route-auto-login/  

