一.前言
二.必要准备
1.首先我们必须要有一台刷好OpenWrt的设备,因为我们需要再路由器设备上对进出的流量进行修改,路由器原厂固件是不具备这样的功能
我这里使用一台小米AX3000T作为演示

2.我们需要一个校园网账号,因为我们只是解除校园网对我们的限制了而已,我们的流量还是要经过学校的服务器的
3.将路由器wan口连上校园网(或者无线中继把路由器连上学校的WiFi),LAN口连我们的电脑(连路由器的WiFi也是一样的),

做完这几步理论上你的电脑应该会弹出熟悉的登录页面,如果不弹出可以点击上图wan/wwan右边的重启按钮
软件准备:1.SSH工具,推荐iShellPro这个软件,因为好看、多平台兼容且集成直观的文件管理功能
三.账号自动登录
1.抓校园网登录包
自动登录的原理简单来说就是抓到校园网登录时候的包,然后用脚本检测是否网络是否畅通,如果不畅通那么就执行我们抓下来的登录包,这样就可以实现自动登录了


跟着上面这两张图就进行操作可以复制到一串类似这样的登陆命令
curl 'http://172.26.3.60:801/eportal/portal/login?callback=dr1003&login_method=1&user_account=%2C0%2C智慧校园账号%40cmccyt&user_password=智慧校园密码&wlan_user_ip=172.31.170.134&wlan_user_ipv6=&wlan_user_mac=000000000000&wlan_ac_ip=&wlan_ac_name=&jsVersion=4.2.1&terminal_type=1&lang=zh-cn&v=9391&lang=zh' \
-H 'Accept: */*' \
-H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6' \
-H 'Connection: keep-alive' \
-H 'DNT: 1' \
-H 'Referer: http://172.26.3.60/' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/141.0.0.0 Safari/537.36 Edg/141.0.0.0' \
--insecure2.替换自动登录脚本的参数
最下面给出已经写好的脚本,我们需要修改这个脚本的两个地方
1.把我们上面抓到的登录包黏贴到脚本LOGIN_RAW_CMD后面的双引号里面
2.获取网络接口名称并填入到WAN_INTERFACE后面的双引号里面
获取网络接口名称方法如下:
1.打开我们下载好的iShellPro软件,SSH连接上路由器
2.执行下面命令,将返回的网络接口名称填入WAN_INTERFACE后面的双引号内
ip route show default

到这里我们已经获得了专属于我们自己的登录脚本,接下来就是将这个登录脚本上传到路由器系统测试功能,及设置开机自启
#!/bin/sh
# 基础配置
PING_TARGET="www.baidu.com" # 网络检测目标(可替换为稳定IP如8.8.8.8)
LOG_FILE="/var/log/auto_net.log" # 日志文件路径
WAN_INTERFACE="phy1-sta0" # 你的WAN口接口名称(已确认正确)
# 直接在两个双引号之间粘贴贴从浏览器复制的登录命令
LOGIN_RAW_CMD=""
# 确保日志文件存在
[ -f "$LOG_FILE" ] || touch "$LOG_FILE"
# 函数:获取WAN口当前IPv4地址(兼容BusyBox,不依赖grep -P)
get_wan_ip() {
# 提取格式:inet 172.26.252.78/24 → 取172.26.252.78
local wan_ip=$(ip -4 addr show dev "$WAN_INTERFACE" | grep 'inet ' | awk '{print $2}' | cut -d '/' -f 1 | head -n 1)
if [ -z "$wan_ip" ]; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 警告:无法获取WAN口IP(接口:$WAN_INTERFACE),请检查接口是否在线" >> "$LOG_FILE"
return 1
fi
echo "$wan_ip"
return 0
}
# 函数:从登录命令自动生成登出命令(无需手动输入)
generate_logout_cmd() {
local login_cmd="$1"
# 替换关键参数生成登出命令(匹配用户提供的登出格式)
local logout_cmd=$(echo "$login_cmd" | \
sed 's/portal\/login/portal\/logout/g' | \
sed 's/callback=dr1003/callback=dr1004/g' | \
sed 's/user_account=[^&]*/user_account=drcom/g' | \
sed 's/user_password=[^&]*/user_password=123/g' | \
sed 's/terminal_type=[^&]*//g' # 移除登出命令中多余的参数
)
echo "$logout_cmd"
}
# 初始化:生成登出命令模板
LOGOUT_RAW_CMD=$(generate_logout_cmd "$LOGIN_RAW_CMD")
echo "$(date "+%Y-%m-%d %H:%M:%S") - 脚本启动,自动生成登出命令模板" >> "$LOG_FILE"
echo "$(date "+%Y-%m-%d %H:%M:%S") - 监控开始(目标:$PING_TARGET,WAN口:$WAN_INTERFACE)" >> "$LOG_FILE"
while true; do
# 1. 获取当前WAN口IP
WAN_IP=$(get_wan_ip)
if [ -z "$WAN_IP" ]; then
sleep 1
continue # 获取IP失败,跳过本次循环
fi
# 2. 检测网络连通性
ping -c 1 -W 1 "$PING_TARGET" > /dev/null 2>&1
PING_RESULT=$?
if [ "$PING_RESULT" -ne 0 ]; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 网络不通(当前WAN IP:$WAN_IP),尝试登录..." >> "$LOG_FILE"
# 3. 动态替换登录命令中的wlan_user_ip为当前WAN IP,并添加静默参数
LOGIN_CMD=$(echo "$LOGIN_RAW_CMD" | sed "s/wlan_user_ip=[^&]*/wlan_user_ip=$WAN_IP/g" | sed 's/curl /curl -sS /')
# 执行登录并捕获输出
LOGIN_OUTPUT=$(eval "$LOGIN_CMD" 2>&1)
CURL_EXIT=$?
echo "$LOGIN_OUTPUT" >> "$LOG_FILE" # 记录登录返回结果
# 4. 判断是否已在线(需要登出)
echo "$LOGIN_OUTPUT" | grep -q '"result":0.*"已经在线!".*"ret_code":2'
IS_ONLINE=$?
if [ "$IS_ONLINE" -eq 0 ]; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - IP已在线,执行登出..." >> "$LOG_FILE"
# 5. 动态替换登出命令中的wlan_user_ip为当前WAN IP,并添加静默参数
LOGOUT_CMD=$(echo "$LOGOUT_RAW_CMD" | sed "s/wlan_user_ip=[^&]*/wlan_user_ip=$WAN_IP/g" | sed 's/curl /curl -sS /')
# 执行登出并捕获输出
LOGOUT_OUTPUT=$(eval "$LOGOUT_CMD" 2>&1)
LOGOUT_EXIT=$?
echo "$LOGOUT_OUTPUT" >> "$LOG_FILE" # 记录登出返回结果
# 记录登出状态
if [ "$LOGOUT_EXIT" -eq 0 ]; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 登出完成(退出码:0)" >> "$LOG_FILE"
else
echo "$(date "+%Y-%m-%d %H:%M:%S") - 登出异常(退出码:$LOGOUT_EXIT)" >> "$LOG_FILE"
fi
else
# 记录登录状态
if [ "$CURL_EXIT" -eq 0 ]; then
echo "$(date "+%Y-%m-%d %H:%M:%S") - 登录完成(退出码:0)" >> "$LOG_FILE"
else
echo "$(date "+%Y-%m-%d %H:%M:%S") - 登录异常(退出码:$CURL_EXIT)" >> "$LOG_FILE"
fi
fi
else
: # 网络正常,不记录日志
fi
sleep 1
done3.将修改好的脚本上传并测试
创建好一个名叫auto_net的sh脚本,将修改好的登录脚本黏贴到这个文件中保存
进行下面的操作把sh脚本上传

对下面的命令依次执行
# 赋予权限
chmod +x /root/auto_net.sh
# 后台运行脚本,并将输出重定向到日志(与脚本内的日志记录不冲突)
/root/auto_net.sh > /dev/null 2>&1 &
#查看日志
tail -f /var/log/auto_net.log此时你如果手动登出校园网,应该可以看到脚本自动帮你又连接上校园网了!

到这里我们只要让这个脚本可以开机自启动就可以了,因为后面的校园网解除多设备限制也会修改开机自启的参数,所以把设置开机自启这部分挪到了后面。
这里附上停止自动登录后台执行的命令
# 终止旧进程
ps | grep auto_net.sh | grep -v grep | awk '{print $1}' | xargs kill -9四.校园网解除多设备限制
目前突破校园网限制的工具基本就两种UA2F和UA3F,他们都是通过修改用户的UA-Agent让系统误以为我们只要一台设备。
这两种工具都会有点小问题,UA2F无法代理腾讯系流量,无法稳定解除且与科学上网一起用还会有莫名其妙的问题。UA3F代理彻底但配置复杂(需要搭配clash),哪怕在clash纯代理国内流量的时候也会出现有些网页打不开的情况。这段时间看到了一个挺有意思的项目,叫UA3F-tproxy,它就是UA3F的简化版,可以不和clash捆绑,大幅简化了操作流程,同时也减小了操作的出错率。
1.安装并且启用UA3F-tproxy

只需要在项目的Release页下载适用于你系统的ipk包 在路由器后台的软件包页面安装即可。

我这里下载的是ua3f-tproxy_0.2.1-1_aarch64_cortex-a53.ipk,如果你不知道应该下载什么版本,你可以SSH输入uname -m来查看你的系统架构

安装好后刷新路由器后台登录页,把启用勾选保存并应用即可,就是这么简单!

我们可以通过这个网页:UA检测-HTTP查看我们是否修改UA成功
2.其他防检测措施及设置开机自启
接下来我们设置一些其他措施来防止校园网检测到多设备。
1.安装好相关软件包及开启NTP时钟
还是一样在路由器后台的软件包页面(系统->软件包)安装下面的软件包
在路由器后台的软件包页面安装这三个软件包
iptables-mod-ipopt
kmod-ipt-ipopt
rkp-ipid
在系统->系统->时间同步中配置NTP时钟

2.然后把下面的开机自启脚本修改后黏贴到系统->启动项->本地启动脚本的“exit 0”之前即可
注意修改1.# 防时钟偏移检测最后一行的IP为你的网关IP地址(路由器后台管理地址)
2.iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN一行,若你校局域网是A类网络,则注释下面这一行
# 启动自动登录脚本并后台运行
/root/auto_net.sh > /dev/null 2>&1 &
iptables -t nat -A PREROUTING -p udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A PREROUTING -p tcp --dport 53 -j REDIRECT --to-ports 53
# 通过 rkp-ipid 设置 IPID
iptables -t mangle -N IPID_MOD
iptables -t mangle -A FORWARD -j IPID_MOD
iptables -t mangle -A OUTPUT -j IPID_MOD
iptables -t mangle -A IPID_MOD -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -d 127.0.0.0/8 -j RETURN
# 若你校局域网是A类网络,则注释下面这一行
iptables -t mangle -A IPID_MOD -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A IPID_MOD -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A IPID_MOD -d 255.0.0.0/8 -j RETURN
iptables -t mangle -A IPID_MOD -j MARK --set-xmark 0x10/0x10
# 防时钟偏移检测
iptables -t nat -N ntp_force_local
iptables -t nat -I PREROUTING -p udp --dport 123 -j ntp_force_local
iptables -t nat -A ntp_force_local -d 0.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 127.0.0.0/8 -j RETURN
iptables -t nat -A ntp_force_local -d 192.168.0.0/16 -j RETURN
iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.5.1
# 通过 iptables 修改 TTL 值
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
# iptables 拒绝 AC 进行 Flash 检测
iptables -I FORWARD -p tcp --sport 80 --tcp-flags ACK ACK -m string --algo bm --string " src=\"http://1.1.1." -j DROP
评论区