游客发表
去年秋天,何破我在宿舍用树莓派搭了个下载机,解校结果被校园网的园网网页认证卡住了。每次重启设备,网页都得手动打开浏览器,认证点那个“登录”按钮。何破烦。解校更别提想远程SSH回宿舍——认证页面根本弹不出来。园网于是网页我开始琢磨,能不能绕开这个烦人的认证网页认证。
先得搞清楚它怎么工作的何破。你连上WiFi,解校网关会把所有HTTP请求重定向到一个认证服务器。园网你输入学号密码,网页服务器验证后,认证把你的MAC地址和IP加入白名单,然后才放行。整个过程依赖一个叫“portal”的协议,不同学校用的方案五花八门——深澜、Dr.COM、锐捷、城市热点……我学校用的是深澜。
最粗暴的办法:直接抓认证请求。用Wireshark监听,或者浏览器F12看Network。登录时,你会看到一个POST请求,里面带着用户名、密码(有时是明文,有时是加密后的)、还有一堆参数。把它复制成cURL命令,写个脚本定时跑。但密码加密方式每个学校不一样,有的用Base64,有的用MD5加盐。我学校的密码是明文……这安全水平,啧。
更省事的方案:模拟浏览器行为。用Python的requests库,构造同样的POST。难点在于有些认证页面会检查User-Agent、Referer,甚至需要先GET一个token。我写了个脚本,先访问认证页拿cookie,再POST登录。跑在树莓派上,每十分钟检查一次网络连通性,断了就重登。代码不到五十行。
import requests import time def login(): s = requests.Session() s.headers.update({ 'User-Agent': 'Mozilla/5.0'}) s.get('http://10.0.0.1/login') data = { 'username': '你的学号', 'password': '你的密码'} s.post('http://10.0.0.1/do_login', data=data) while True: try: requests.get('http://www.baidu.com', timeout=3) except: login() time.sleep(600) 但有些学校更狠。认证服务器会检测MAC地址变化,或者限制同一账号只能在线一台设备。这时候得改MAC地址。Linux下用macchanger,Windows用注册表。不过改MAC可能违反校规,自己掂量。
还有一种情况:认证页面根本加载不出来。比如你连上WiFi,浏览器却打不开任何网页。这时候手动访问网关IP,通常是10.0.0.1或192.168.1.1,或者试试http://1.1.1.1。有些认证服务器只响应特定域名,比如connect.rom.miui.com——小米手机连WiFi时自动弹认证页用的就是它。
我试过最野的路子:DNS隧道。把认证流量伪装成DNS查询,绕过portal。但延迟高得离谱,看个网页都卡。不实用。
如果你只是想让自己设备免认证,还有个办法:找一台已经认证过的设备,开热点共享。但校园网通常检测TTL,发现你共享会踢下线。改TTL?Windows改注册表,Linux用iptables。麻烦,但有效。
最后提醒一句:破解校园网认证可能违反学校网络使用规定。轻则断网,重则处分。我写这些只是技术探讨,别拿去干坏事。真要稳定联网,不如去跟网络中心反映——虽然大概率没用。
我现在用树莓派跑着那个脚本,已经稳定三个月。偶尔掉线,自动重连。省心。但每次看到认证页面那个丑陋的蓝色按钮,还是想吐槽:都2025年了,能不能换个优雅点的方案?
```友情链接