本篇教程仅作思路分享,因本文章导致的校园网账号封禁、学校处分以及各种违规、违法行为,本人不承担任何责任以及道德谴责,后果自负!!!

校园网检测的系统是武汉雨滴科技有限公司
学校校园网登录地址为湖北国土资源学院认证
终端管理地址为雨滴哑终端管理,有实力的可以进终端管理玩玩,很刑!

实现WEB自动登录认证

登录脚本

#!/bin/ash

# 获取eth3网口的IP地址
eth3_ip=$(ip addr show eth3 | grep 'inet ' | awk '{print $2}' | cut -d '/' -f 1)

# 检查是否成功获取到了IP地址
if [ -z "$eth3_ip" ]; then
  echo "无法获取eth3网口的IP地址,请检查网口是否存在或配置是否正确。"
  exit 1
fi

# 定义登录地址变量
login_url="http://172.16.1.2/api/account/login"
initial_url="http://172.16.1.2/tpl/default/login_account.html?ip=$eth3_ip&nasId=1"

# 使用已经提供的Cookie和X-CSRF-Token
cookie_value="提前登录在浏览器上使用F12获取Cookie(仅需'yudear='后的字段即可)"
csrf_token="提前登录在浏览器上使用F12获取X-CSRF-Token"

# 定义账号密码变量
username="账号"
password="密码"

# 使用curl发送POST请求
response=$(curl -sS "$login_url" \
  -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 "Content-Type: application/x-www-form-urlencoded; charset=UTF-8" \
  -H "Cookie: yudear=$cookie_value" \
  -H "Origin: http://172.16.1.2" \
  -H "Referer: $initial_url" \
  -H "X-CSRF-Token: $csrf_token" \
  -H "User-Agent: SouFan" \
  -H "Accept-Language: zh-CN,zh;q=0.9,en;q=0.8" \
  --data-raw "username=$username&password=$password&nasId=1&isp=local&timeLimit=" \
  --insecure)

# 输出响应
echo "$response"

最后的账号密码需要更改,请注意!

检测网络异常自动登录脚本

#!/bin/sh

# 定义要检查的网址,这里以百度为例
CHECK_URL="baidu.com"

# 定义检测间隔时间(秒)
INTERVAL=60

# 定义处理断网情况的脚本路径
AUTOLOGIN_SCRIPT="这里填写你登录脚本的路径"

# 检查网络连接的函数
check_network_connection() {
    if ping -c 1 $CHECK_URL > /dev/null; then
        echo "网络连接正常"
        return 0 # 网络正常
    else
        echo "网络连接异常"
        return 1 # 网络异常
    fi
}

# 主循环,持续检查网络
while true; do
    if ! check_network_connection; then
        # 网络异常时,执行自动登录脚本
        echo "执行自动登录脚本..."
        /bin/bash $AUTOLOGIN_SCRIPT
    fi
    sleep $INTERVAL
done

最好通过ftp上传,文件传输协议选择SCP

记得给这个两个文件执行权限

chmod +x 文件名

想要实现脚本开启运行只需在
系统-启动项-本地运行脚本下的exit 0前添加

文件路径 start
例如:/etc/init.d/shellcrash start

运行脚本就发现登录成功啦!

防检测配置

各种检测方案:# 关于某大学校园网共享上网检测机制的研究与解决方案
本篇教程只做关于UA字段(user-agent)的修改

  • 进入 OpenWRT 系统设置, 勾选 Enable NTP client(启用 NTP 客户端)和 Provide NTP server(作为 NTP 服务器提供服务)
  • NTP server candidates(候选 NTP 服务器)四个框框分别填写 ntp1.aliyun.comtime1.cloud.tencent.comstdtime.gov.hkpool.ntp.org

方法一:使用UA3F修改UA(首推)

UA3F 是新一代 HTTP User-Agent 修改方法,对外作为一个 SOCK5 服务,可以部署在路由器等设备等设备进行透明 UA 修改。

部署UA3F

Release 页面已经提供常见架构的编译版本,可以根据自己架构下载并解压到路由器等设备上。

安装(升级)脚本:

opkg update
opkg install curl libcurl luci-compat
export url='https://blog.sunbk201.site/cdn' && sh -c "$(curl -kfsSl $url/install.sh)"
service ua3f reload

在服务-UA3F中启用

防火墙添加自定义规则

UA3F可以只加修改TTL这一条

# 通过 iptables 修改 TTL 值 数字为需要的修改的ttl值
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64

UA3F与ShellCrash(ShellCrash和OpenClash二选一即可)

1、执行以下命令

sh -c "$(curl -kfsSl https://cdn.jsdelivr.net/gh/juewuy/ShellClash@master/install.sh)" && source /etc/profile &> /dev/null

2、选择2稳定版

3、选择1/etc目录下安装

4、输入crash

5、选择1路由设备配置局域网透明代理,选择1启用自动任务配置,选择1开始导入,选择2在线获取完整配置文件

6、输入链接:国内版:https://cdn.jsdelivr.net/gh/SunBK201/UA3F@master/clash/ua3f-cn.yaml
国际版:https://cdn.jsdelivr.net/gh/SunBK201/UA3F@master/clash/ua3f-global.yaml
国际版(增强):https://cdn.jsdelivr.net/gh/SunBK201/UA3F@master/clash/ua3f-global-enhance.yaml
也可在这里进行下载http://pan.sfwww.cn/#s/-luXouzw

如果安装Meta内核很慢,可以输入crash,9更新/卸载-7切换安装源及安装版本
7、选择2进入内核功能设置,选择4关闭只代理常用端口

8、选择0返回上级菜单,选择1重启服务

9、验证是否生效
访问 http://ua.233996.xyz,发现真实UA与浏览器UA不一致极为成功,例图如下:

ShellCrash自动启动

在系统-启动项-本地启动脚本exit 0前添加

/etc/init.d/ua3f start
/etc/init.d/shellcrash start

UA3F与OpenClash(OpenClash和ShellCrash二选一即可)

1、安装 OpenClash

opkg update
opkg remove dnsmasq && opkg install dnsmasq-full
#用于将 OpenWrt 的 dnsmasq 换为 dnsmasq-full
opkg install coreutils-nohup bash dnsmasq-full curl ca-certificates ipset ip-full libcap libcap-bin ruby ruby-yaml kmod-tun kmod-inet-diag unzip kmod-nft-tproxy luci-compat luci luci-base
#安装 OpenClash 相关依赖
cd /root && wget https://github.com/vernesong/OpenClash/releases/download/v0.46.001-beta/luci-app-openclash_0.46.001-beta_all.ipk -O openclash.ipk
#下载 OpenClash ipk 包
opkg install openclash.ipk
#安装 OpenClash

2、在服务-OpenClash-配置管理中上传相应配置

①国内版,无需进行任何修改,可直接使用 ua3f-cn.yaml (Clash 需要选用 Meta 内核。)
②国际版,针对有特定需求的特殊用户进行适配,ua3f-global.yaml,注意需要在 proxy-providers > Global-ISP > url 中(第 23 行)加入你的代理节点订阅链接。(Clash 需要选用 Meta 内核。)
③国际版(增强),针对流量特征检测 (DPI) 进行规则补充,注意该配置会对 QQ、微信等平台的流量进行分流代理,因此需要根据自己的需求谨慎选择该配置,ua3f-global-enhance.yaml,注意需要在 proxy-providers > Global-ISP > url 中(第 23 行)加入你的代理节点订阅链接。(Clash 需要选用 Meta 内核。)
④也可在这里进行下载http://pan.sfwww.cn/#s/-luXouzw
3、在插件设置里勾选*使用 Meta 内核并保存、应用配置

4、在运行状态下启动OpenClash

5、验证是否生效
访问 http://ua.233996.xyz,发现真实UA与浏览器UA不一致极为成功,例图如下:

OpenClash自动启动

在系统-启动项-本地启动脚本exit 0前添加

/etc/init.d/ua3f start
/etc/init.d/openclash start

方法二:使用UA2F修改UA(配置低用这个)

Zxilly/UA2F: Change User-Agent to F-words on OpenWRT router to prevent being detected. (github.com)

编译安装UA2F

编译UA2F教程
如果是x86-64mt798xaarch64\_genericmt7621架构或处理器可查看OpenWrt 使用 UA2F 绕过校园网 UA 检测全解析案例 - miaoer (xlog.page)这篇文章免编译安装,简单点。

UA2F命令

# 启用 UA2F
uci set ua2f.enabled.enabled=1

# 可选的防火墙配置选项
# 是否自动添加防火墙规则
uci set ua2f.firewall.handle_fw=1

# 是否尝试处理 443 端口的流量, 通常来说,流经 443 端口的流量是加密的,因此无需处理
uci set ua2f.firewall.handle_tls=1

# 是否处理微信的流量,微信的流量通常是加密的,因此无需处理。这一规则在启用 nftables 时无效
uci set ua2f.firewall.handle_mmtls=1

# 是否处理内网流量,如果你的路由器是在内网中,且你想要处理内网中的流量,那么请启用这一选项
uci set ua2f.firewall.handle_intranet=1

# 使用自定义 User-Agent
uci set ua2f.main.custom_ua="Test UA/1.0"

# 应用配置
uci commit ua2f

# 开机自启
service ua2f enable

# 启动 UA2F
service ua2f start

# 读取日志
logread | grep UA2F

防火墙添加自定义规则

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
# 若没有加入rkp-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
# 需将192.168.11.1改为自己路由器的地址
iptables -t nat -A ntp_force_local -s 192.168.0.0/16 -j DNAT --to-destination 192.168.11.1
# 通过 iptables 修改 TTL 值 数字为需要的修改的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

方法三:请查看SunBK201

备份:

https://blog.sunbk201.site/posts/change-ua-by-proxy


2021-05-30# 全新方案-懒人福音-无需手动编译修改UA-校园网防检测

校园网防检测: UA3F - 新一代 UA 修改方法

关于某大学校园网共享上网检测机制的研究与解决方案

OpenWrt 编译与防检测部署教程

阅读过上面两篇文章的同学可以发现,手动编译OpenWrt是一件很痛苦的事。 显然对于一些动手能力不强的同学来说,通过 UA2F 修改UA是比较困难的。而且,UA2F从设计层面上也存在一些问题,例如无法处理网卡分包等情况。

因此,我们需要一种更加简单的方案,既能无需编译OpenWrt,又能更好的满足我们的需求。

之前我曾经提到过我们可以通过加密流量来实现防检测,但我当时并没有采取这个策略,因为进行全局加密网络流畅度影响太大, 而进行部分加密目前市面上还没有很好的解决方案(之前是这么认为),目前大多数加密软件都是基于规则的加密,但支持的多为针对域名的加密。

然而我们的需求是针对http应用层的加密,这类加密方案目前支持的不多。

经过我深入了解,Clash 中 DstPort 是我们最理想的规则选项,我们可以指定代理目标端口为http的80端口从而实现http应用层的加密。

此外,除了针对http的加密外,我们还可以通过支持Mitm的网络调试工具对http中UA进行重写以达到修改UA的目的。

基于上面的分析,我总结了以下方案:
Windows 用户

使用 Clash,添加规则:

- DST-PORT,80,proxy

加入以上规则即可实现针对 80 端口的加密
Andorid 用户

使用 Clash,添加规则:

- DST-PORT,80,proxy

加入以上规则即可实现针对80 端口的加密
iOS & Mac 用户

使用 Quantumult X/Surge 等支持重写的工具,添加重写规则:

# Quantumult X
^http:// url request-header (\r\n)User-[A|a]gent:.+(\r\n) request-header $1User-Agent: F$2
# Surge
^http:// header-replace User-Agent F

加入以上规则即可实现针对 UA 的重写
OpenWrt 配置

使用 OpenClash,添加规则:

- DST-PORT,80,proxy

如果在 OpenWrt 加入这条配置,那么就无需进行其他终端的配置了。
其他

对于 TTL 和 NTP 方面,我们无需进行手动编译,常见的 OpenWrt 固件都能够默认支持。 对于 IPID,我认为无需关注,基于 IPID 的检测我认为是不现实且很少见的。

如果有疑问可以加讨论组:Telegram

Copyright © SunBK201 Ushiromiya

最后修改:2024 年 09 月 30 日
如果我的文章对你有用,请帮助小站能够存活下去( •̀ ω •́ )✧