春溪月

何时共泛春溪月,断岸垂杨一叶舟。

校园网共享上网检测机制的研究与解决方案

文章 0 评

前提

本文并非所有内容为原创内容,如有疑问请联系作者

关于本校的校园网限制两个以上的设备设备同时连接,前面想到了采用软路由的方式,通过复制Mac地址的方式实现了对校园网设备限制的简单破解,但是很容易被检测到,一旦发现一个IP下有多个不同设备的流量,就会封禁账号,一般封禁 3 分钟到 10 分钟不等。虽说不像其他学校封禁半小时、几天那么变态,但毫无规律的封禁(可能是人工手动封禁)十分的恼人。
因此本人出于兴趣,以及个人需求,对本校校园网共享上网检测机制进行了研究分析,并针对该机制提出了一些解决方案。

对于本校校园网网络环境的说明

  • 校园网网络硬件设备:锐捷三层交换机(猜测是)
  • 校园网认证系统:Drcom Web Portal 认证(Dr.COM网页认证)
  • 校园网网络防火墙安全方案:深信服(学校自爆 -。-)点击查看

本校校园网共享上网检测机制的研究

  1. 基于 IPv4 数据包包头内的 TTL 字段的检测
  2. 基于 HTTP 数据包请求头内的 User-Agent 字段的检测
  3. 基于 IPv4 数据包包头内的 Identification 字段的检测
  4. 基于网络协议栈时钟偏移的检测技术
  5. Flash Cookie 检测技术
  6. DPI (Deep Packet Inspection) 深度包检测技术

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

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

不同的操作系统的默认 TTL 值是不同的,Windows 是 128, macOS/iOS、Linux 是 64。
因此如果我们自己接入路由器到校园网,我们的通过路由器的数据包会变为 127 或 63,一旦校园网抓包检测到这种数据包TTL不是128或64,就会判定为用户接入了路由器。
基于 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 的字段,则判定存在多设备上网。

DPI (Deep Packet Inspection) 深度包检测技术
这个检测方案比较先进,检测系统会抓包分析应用层的流量,根据不同应用程序的数据包的特征值来判断出是否存在多设备上网。

具体可参考:基于dpi技术的网络共享设备检测方法及系统

此种方式已确认在锐捷相关设备上应用,当由于此项功能极耗费性能,因此有些学校可能不会开启此项功能。

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

IP报文首部存在一个叫做 Identification 的字段,此字段用来唯 一标示一个IP报文,在实际的应用中通常把它当做一个计数器,一台主机依次发送的IP数据包内的 Identification 字段会对应的依次递增,同一时间段内,而不同设备的 Identification 字段的递增区间一般是不同的,因此校园网可以根据一段时间内递增区间的不同判断出是否存在多设备共享上网。

具体可以参考此专利:基于ipid和概率统计模型的nat主机个数检测方法

不过经过我的抓包分析,Windows 的TCP/IP协议栈对 Identification 字段的实现是递增,而 iOS 的实现是保持全0,因此校园网是否使用了该检测机制有待商榷。

基于网络协议栈时钟偏移的检测技术

本发明涉及互联网技术领域,具体涉及一种基于时钟偏移的加密流量共享检测方法与装置,其中方法包括:实时获取当前各用户上网所触发的一个或多个会话,并基于各会话的会话持续时间判断是否满足短会话应用场景;如果满足短会话应用场景,则通过解析用户在当前第一预设时间段内上网所产生的各协议报文,获取协议报文中携带的一个或多个时钟偏移值;统计在当前第一预设时间段内相同时钟偏移值的通量,并基于该通量得到当前第一预设时间段内的共享设备数。本发明充分利用加密协议中携带的时钟偏移而非传统固定特征来标示设备,通过统计时钟偏移在一定时间内出现相同值的个数确定共享设备数,可解决固定标识符无法进行流量共享检测的问题。。

具体可以参考此专利:一种基于时钟偏移的加密流量共享检测方法与装置

此种方式具有一定的实验性,因此我不认为此种方式投入了商用。

Flash Cookie 检测技术

这个技术已经用不到了,Flash都凉了。。不过还是提一下。

Flash Cookie会记录用户在访问 Flash 网页的时候保留的信息,只要当用户打开浏览器去上网,那么就能被 AC 记录到 Flash Cookie 的特征值,由于 Flash Cookie 不容易被清除,而且具有针对每个用户具有唯一,并且支持跨浏览器,所以被用于做防共享检测。

具体参考:深信服防共享测试指导书

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

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

开始工作

  • 准备一台安装有老毛子的路由器
  • 一台电脑
  • 一个开通校园账号
  • wireshark(抓包工具,可以不用)
  • notepad++(修改代码用到,或者其他编辑器,你要是用记事本也行。)
  • FinalShell(ssh工具,用与连接路由器)

开始抓包获取url

连接校园网,打开Microsoft Edge(这里方便大多数同学操作采用了Edge 浏览器),等待跳转到登录界面
1


1
获取url,这里可以知道我学校校园网登陆窗页面IP为172.16.71.169端口为8080

找到有请求方法: POST的一项(基本是第一项) 按图片操作复制url

在电脑上新建一个记事本,将刚刚复制的内容粘贴进去(建议还是用个编辑器)

可以获取到一些信息,这里不做过的分析因为系统原因,以及浏览器不一样等情况,每个人获取的url有出入。

#!/bin/bash
logger "开始定时检测"
curl http://172.16.71.169 > drcom.html
check_status=`grep "Dr.COMWebLoginID_0.htm" drcom.html`
if [[ $check_status != "" ]]
then
    #尚未登录
    logger "上网登录窗尚未登录"
    ##此处为你已修改完毕的curl
    logger "上网登录窗未登录,现已登录"
else
    #已经登录
    logger "上网登录窗之前已登录"
fi
logger "】结束定时检测"

将你的url填入,保存为.sh文件格式

路由器的设置

关于路由器刷入老毛子(Padavan)固件,可以参考我的上一篇文章
使用 ssh 连接你的路由器(具体方法百度)
连接路由器后台 pandavan 的后台地址默认为 192.168.123.1 账号密码都是 admin

将上面的.sh文件重命名为 dogcom上传到路由器的/etc/storage/bin 目录

关闭ssh工具,进入路由器后后台高级设置 → 系统管理 → 恢复/导出/上传设置 → 路由器内部存储[脚本文件] (/etc/storage) → 点击「保存 /etc/storage/ 内容到闪存」的「提交」按钮。

然后再进入:高级设置 → 自定义设置 → 脚本 → (以下两处)
「在路由器启动后执行」,「在 WAN 上行/下行启动后执行」在代码末尾添加:
/etc/storage/drcom.sh 保存即可
现在路由器应该不受设备限制,且应该不会被检测到(没有100%不会被检测到)

给路由器添加连接情况监控

使用Server 酱进行微信推送

Server 酱, 英文名「ServerChan」, 是一款「程序员」和「服务器」之间的通信软件。
说人话?就是从服务器推送报警和日志到手机的工具。
教程、项目地址: http://sc.ftqq.com/
可到“ 自定义 Crontab 定时任务脚本 ”配置晚间免打扰推送时间

注册sever酱

注册sever酱(点击注册)服务获取到SendKey
使用方法可以查看sever酱的文档,效果如图

Telegram Botjin进行推送

在此之前,要让你的路由器处于可以访问 Telegram API(不要问我怎么才能让路由器访问Telegram API,不会请用 sever酱),对于Padavanz自带有hiboy(hiboy是Padavan是自带tgbot功能的用于检测互联网 IP 变动,给予设备接入提醒,设备上、下线提醒,固件更新提醒)

注册自己的Telegram Bot

在 Telegram 中找到 @botfather,向它发送 /newbot。根据提示依次设置自己的Bot名和用户名,注册完成,Bot Father 应该会给你一串 token,进入路由器后台找到扩展功能→广告屏蔽功能→tgbot填入token即可。

选择你想要的功能开启即可,效果如图:

参考资料

关于某工业大学校园网共享上网检测机制的研究与解决方案
Dr.Com 通过路由器 (老毛子 Pandavan) 自动登陆教程
天津师范大学 校园网登陆脚本 Dr.Com
hiboy固件使用教程

数据库(mysql)学习笔记
快来做第一个评论的人吧~