校园网多设备检测绕过

本文参考以下文章:

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

OpenWrt 编译步骤与命令详解教程 - P3TERX ZONE

目前主要的检测方式有以下几种

基于 HTTP 数据包请求头内的 User-Agent 字段的检测

HTTP数据包请求头存在一个叫做 User-Agent 的字段,该字段通常能够标识出操作系统类型,例如:

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.72 Safari/537.36 Edg/89.0.774.45

Mozilla/5.0 (iPad; U; CPU OS 3_2_1 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Mobile/7B405

校园网会通过多次抓包检测此字段,若发现同时出现例如Windows NT 10.0 iPad 的字段,则判定存在多设备上网。

基于 IPv4 数据包包头内的 TTL 字段的检测

存活时间(英语:Time To Live,简写TTL)是电脑网络技术的一个术语,指一个数据包在经过一个路由器时,可传递的最长距离(跃点数)。 每当数据包经过一个路由器时,其存活次数就会被减一。 当其存活次数为0时,路由器便会取消该数据包转发,IP网络的话,会向原数据包的发出者发送一个ICMP TTL数据包以告知跃点数超限。 其设计目的是防止数据包因不正确的路由表等原因造成的无限循环而无法送达及耗尽网络资源。

这是一个比较有效且合理的检测技术,IPv4数据包下存在 TTL(Time To Live)这一字段,数据包每经过一个路由器(即经过一个网段),该TTL值就会减一。

不同的操作系统的默认 TTL 值是不同的,Windows 是 128, MAC OS/IOS、Linux 是 64。

因此如果我们自己接入路由器到校园网,我们的通过路由器的数据包会变为 127 或 63,一旦校园网抓包检测到这种数据包TTL不是128或64,就会判定为用户接入了路由器。

防共享上网检测的解决方案

对于校园网重重的检测,我们似乎已经不可能从终端级提出一个完美的解决方案,因此,下面的解决方案都是基于网关级的。简单来说,我们需要在路由器上动手脚。

路由器固件我们选择OpenWrt,这是一个开源的路由器系统,允许我们自定义其系统内核以及添加自定义插件。

不过我们需要自己交叉编译 OpenWRT,同学们需要有一定的功底。

基于 IPv4 数据包包头内的 TTL 字段的检测

应对思路很简单:修改 TTL 为固定值。

# 在 OpenWRT 路由器上安装必要的软件包
opkg update && opkg install iptables-mod-ipopt kmod-ipt-ipopt
  • 进入 OpenWRT 防火墙设置,在 自定义设置 中填入以下内容( WAN 、LAN 口名称需根据实际情况进行更改 )
iptables -t mangle -A POSTROUTING -j TTL --ttl-set 64
  • 点击 保存并应用

基于 HTTP 数据包请求头内的 User-Agent 字段的检测

使用 UA2F 修改 UA

这可能是最好的方案,UA2F 可以修改所有端口的数据包,而且性能不错,不过依旧需要编译。

具体参见: Zxilly/UA2F: Change User-agent to F-words on OpenWRT router to prevent being checked. (github.com)

验证方式:  UA检测-HTTP (233996.xyz)