分享红米AC2100的刷机过程和自动登录校园网。
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. 所需固件和软件
在开始刷机前,请准备好以下固件和工具:
Padavan (老毛子) 固件: 支持开启 160 MHz 频宽。下载地址:padavan 搜索 RM 2100,下载 RM 2100_3.4.3.9-099.Trx 文件。 QB-BOOT: 适配 RM 2100 的 PB-BOOT 正式版。Breed: 由于官方 Breed 网站 (breed.hackpascal.net ) 已无法访问,这里提供一个网盘链接。OpenWrt 固件 (带校园网检测插件): 可选,根据个人需求选择是否集成多播和校园网防检测插件。官方降级包: 用于将路由器固件降级到旧版本,以便利用漏洞注入 Breed。3. 路由器降级
为了利用旧版固件的注入漏洞,需要将路由器官方固件降级到 2.0.7 版本。
登录路由器后台管理界面。 上传上述准备好的“官方降级包”。 路由器重启后,即完成降级。 4. 注入并刷入 Breed
此步骤旨在将 Breed Web 恢复控制台注入到路由器中。参考恩山论坛的方案:小米 红米【AC2100】一键刷BREED【30秒刷完】小白帅小伙专用 检查坏块 | 无需Telnet-小米无线路由器及小米网络设备-恩山无线论坛 。
4.1 核心步骤
由于官方 Breed 网站无法访问,无法直接使用教程中的注入 URL。需要先下载 Breed 固件到本地,然后通过本地 HTTP 服务器提供给路由器。
获取你电脑的本地 IP 地址和路由器的 IP 地址。 登录路由器后台,在浏览器地址栏中找到 URL 中的 stok 参数值并复制下来。 在你下载 Breed 固件的文件夹中,按住 Shift 键并右键点击空白处,选择“在此处打开 PowerShell 窗口”或“在此处打开命令窗口”,输入 cmd 进入命令行。 开启一个本地 HTTP 服务器: 在命令行中执行 python -m http.server 8080 --bind 0.0.0.0。请勿关闭此窗口 ,它将用于向路由器提供 Breed 固件。获取 Breed 固件的 SHA 256 值: 在另一个命令行窗口中,执行 certutil -hashfile breed.bin SHA256(假设你的 Breed 固件文件名为 breed.bin)。重要: 在进行注入操作前,务必关闭 Windows 的防火墙和杀毒软件 ,以避免阻碍路由器访问本地服务器。现在,可以拼接注入 URL。
原始注入 URL 示例:
1
http : // 【路由器的 IP地址 】 / cgi - bin / luci / ; stok = 【路由器的 Stok 】 / api / misystem / set_config_iotdev ? bssid = Xiaomi & user_id = longdike & ssid =% 0 Acd % 20 % 2 Ftmp % 0 Acurl % 20 http % 3 A % 2 F % 2 F 【您电脑的 IP地址 】 % 3 A 【 HTTP服务器端口 】 % 2 F 【固件文件名】 % 20 - o % 20 B % 0 A % 5 B % 20 - z % 20 % 22 % 24 ( sha256sum % 20 B % 20 % 7 C % 20 grep % 20 【固件的 SHA256校验值 】 ) % 22 % 20 % 5 D % 20 % 7 C % 7 C % 20 mtd % 20 - r % 20 write % 20 B % 20 Bootloader % 0 A
URL 解码后的命令(方便理解):
1
2
3
4
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 后台
断开路由器电源。 用牙签或卡针顶住路由器的 Reset 键。 重新接上电源。 观察指示灯:如果闪烁蓝色 ,表示已成功进入 Breed 模式;如果闪烁橙色 ,则表示进入的是原厂 UBOOT。当指示灯闪蓝时,即可松开 Reset 键。 用网线将电脑连接到路由器的任意一个 LAN 口。 将电脑以太网适配器的 IP 地址手动设置为 192.168.1.100,子网掩码设置为 255.255.255.0。 使用浏览器(推荐无痕模式)访问 192.168.1.1,即可进入 Breed 后台管理界面。
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 步骤
备份固件: 在刷入任何固件之前,强烈建议备份路由器的 EEPROM 和编程器固件。
在 Breed 中刷入 PB-BOOT。 在 PB-BOOT 中刷入 Padavan (老毛子) 固件。
完成此步骤后,路由器成功重启,并能看到名为 PCDN 的 Wi-Fi 信号,表明 Padavan 固件已成功刷入。
双清: 进入 Padavan 后台后,建议进行“双清”操作,以清除旧配置并确保系统稳定运行。6. 通过校园网网页认证
学校对所有接入校园网的设备都要求通过网页验证。路由器接入校园网后,如果未认证,所有连接到路由器的设备都无法上网。让路由器通过认证,可以使宿舍所有设备无需单独验证即可联网。
有两种主要方法实现路由器通过校园网认证:
MAC 克隆: 让一台电脑通过验证后,路由器克隆该电脑的 MAC 地址。此方法操作相对麻烦,但官方固件通常自带 MAC 克隆功能。运行认证脚本: 编写一个脚本,让路由器开机自动执行,完成网页认证。这也是我选择刷机的主要原因。通过 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 无线登录脚本
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/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 有线登录脚本
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
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#!/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
) &
使用方法:
将脚本保存为 .sh 文件(例如 autologin.sh)。 赋予脚本执行权限:chmod +x <脚本名>。 根据脚本内的注释,填入你的学号、密码和运营商代码。 执行脚本:./<脚本名>。 有线登录脚本需要放入 padavan 路由器后台 的 开机执行脚本 里面。就可以在路由器通电后自动登录了。所以也是采用了硬编码的方法。 7. 偶遇学校断网经历
在使用 Wi-Fi 时,舍友突然断网,而我的设备仍能正常上网。
此时我仍能正常上网,且开启了代理。代理会将 DNS 请求加密并通过代理服务器发起解析(即 DoH - DNS over HTTPS)。猜测是学校的 DNS 出现了问题。
如果希望在学校 DNS 服务故障时宿舍网络仍能正常使用,可以考虑安装 AdGuard Home。在我刚安装好后,学校网络就恢复正常了,因此未能进行实际测试。下次遇到类似情况时再进行验证。
8. 参考资料
小米 红米【AC2100】一键刷BREED【30秒刷完】小白帅小伙专用 检查坏块 | 无需Telnet-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz! 红米AC2100(rm2100)breed刷入padavan老毛子无法进入、坏块 通过breed刷入pb-boot解决-小米无线路由器及小米网络设备-恩山无线论坛 - Powered by Discuz! Dr.COM校园网多设备解决方案——路由器 Padavan/LuCI 固件自动网页认证+Telegram Bot 定时发送连接情况 - 虤虤豆