本文章所探讨内容仅做学习研究使用,请勿用作其他违法用途!

起因

前几天在用校园网进教务系统的时候无意间发现就算不进行认证登录,也是可以正常访问教务系统的。不过以前我只知道可以通过内网IP的形式打开,今天无意中尝试的用域名,发现也能打开。

接着我就好奇了一下,是不是所有学校域名的网站都能打开呢?于是,我尝试了学校官网、图书馆、邮件系统的网址,发现都可以在不认证的情况下直接打开。

起初我以为这些学校网站的服务器都是在学校内网,ping了一下官网的网址,ip查询结果是联通教育网,地域是我们学校附近(河南)。然而,当我尝试ping邮件系统的网址时发现,该IP的地域位于中国广东,并不是教育网。(也好理解,邮件系统对接的是腾讯企业邮箱)

于是我便产生了怀疑,既然不认证也能直接访问广域网,那这个认证机制的意义何在?

进一步研究

为了研究校园网的认证系统是如何拦截的,我首先提出了直接对于域名进行识别。

为了验证这个猜想,我便进行了下面的Host实验。

host实验

host就相当于在本地提前对域名进行解析,可以直接覆盖上游DNS解析结果(个人是这么理解的),那么只要将学校域名通过host解析到其他的IP,然后通过该域名访问,就可以验证上面的猜想是否成立。

于是我便在电脑的host里增加了一条(IP地址就不公开了):

1
47.xxx.xxx.xxx mail.xxxxx.edu.cn

然后在浏览器中打开 mail.xxxxx.edu.cn,测试可以打开我服务器的页面。

接着进一步验证认证系统是否放行所有xxxxx.edu.cn的子域名。

修改Host文件:

1
47.xxx.xxx.xxx test123.xxxxx.edu.cn

同样进行上述操作,测试结果仍成立。

所以我们便可得出结论:对于所有xxxxx.edu.cn的子域名,认证系统均予以放行。而对于其他域名,认证系统只是进行了简单的重定向,并没有封掉IP。

绕过认证的思路

在上述结论成立的基础下,我们就可以在服务器部署代理程序,然后对代理流量进行域名伪装。

这里需要注意的是,服务器的代理端口一定要是80或443端口,因为我们要伪装成http流量。

同时为了保险起见,我还是在hosts文件中保留了上面的解析。

下面测试我用的是v2ray代理,服务端开启TCP_HTTP伪装模式,监听80端口。

为了方便部署,我这里直接使用了233boy的部署脚本

然后在本地添加配置文件,伪装类型选择http,伪装域名填xxxxx.edu.cn的子域名,我测试填的是mail.xxxxx.edu.cn

然后切换到学校的WiFi,将v2rayN切换到全局模式,用浏览器打开网页测试。

因为我服务器的宽带只有1Mbps所以加载了一段时间,最后还是打开了。

不过既然能打开,就说明此方案可行。

仍存在的问题

  1. 全局代理问题

    我们用的v2rayN的全局代理只是对于客户端在本地监听的端口而言的。浏览器使用的系统代理只是针对于浏览器的。所以我们需要一个传输层的代理来接管所有的系统流量才行。比如像 Proxifier, SSTap, Surge 那种(这些软件我也没用过)。

  2. 服务器资费问题

    因为搭建代理程序需要服务器,而且要满足日常使用,服务器的宽带得够大才行。而服务器的宽带费用可能就比校园网的费用还多了,最终折算下来很可能得不偿失。

不过如果你正好有足够的服务器资源,其实还是可以尝试的。另外,如果你有机场的的节点,并且支持http伪装且端口是80或443,实测也可以直接更改域名伪装参数来实现认证绕过。不过你的流量从外国绕了一圈再绕回来的话,效率也就可想而知了。