MENU

我是如何制作教务系统特别版的

2018 年 12 月 20 日 • 技术流

教务系统特别版是我建造的一个方便抢课的网站。基于官方教务系统,解决抢课难的痛点,自己当作是“新一代”抢课技术。有过几次小范围的试验,非常成功。这学期本来没有想再开放使用,然后看了一下,发现方法已经失效。那么不如把我的思路和相关源代码写出来,一起交流学习。

思路:破除障眼法

如果你已经看过《抵制 “抢课黄牛”,抢课方法大公开》(没有的话赶紧先看),你一定知道:教务系统有多台服务器,不同的服务器有不同的选课(抢课)体验。更准确地说,人少的服务器比人多的服务器更快。我的教务系统特别版将这一点发挥到了极致,以至于那个服务器几乎是专为我服务的。

事情是这样的。似乎有一段时间,教务处网站服务器下面也有教务系统,域名都是 jwc.csust.edu.cn。后来,两者逐渐分家,jwc.csust.edu.cn 分配给教务处网站,而教务系统则稳定使用 xk.csust.edu.cn。于是输入 http://jwc.csust.edu.cn,则会跳转(重定向)到 http://jwc.csust.edu.cn/jwc/,没有教务系统了。如果坚持要输入原教务系统的首页地址 http://jwc.csust.edu.cn/default.aspx,也是不行的。

然而,在相当长一段时间内,这只是个障眼法:跳转是会跳转,但原教务系统其实还在

无意中我进入了原来教务系统的某个网页,竟然有正常的提示。那个网页地址是 http://jwc.csust.edu.cn/MAINFRM.aspx,有要我登录的提示。当然,如果我按照提示回到首页,还是会失败。但这起码表明,教务系统其实是还在的。

我想,我若是能补全首页,说不定就能完整地使用它。之后我用 Nginx 搭建反向代理,并扒下正常的首页进行补足,成功了。

这样,每到选课之时,几乎没有人会使用这台服务器(他们如果尝试进入就会导向教务处网站),能使用的只有像我这样发现这个秘密的人。当然没有谁跟我竞争啦,先发优势火力全开。

实现:反向代理,补全首页

我选择的是利用 Nginx 搭建 jwc.csust.edu.cn 的反向代理,并用正常首页的静态页面接管首页路由。也可以有别的方案。

Nginx 是一个知名的 Web 服务器兼反向代理软件,免费开源。所谓反向代理,就是我搭建好以后,你访问它就相当于访问原网站,感受不到什么区别,其实却是我的服务器在处理。

首页 HTML

把正常的教务系统首页扒下来,保存为 HTML 文件。在这里我保存为 default.html,放到 /var/www/xk.csust.xuab.net 目录下。

这里就不提供源代码了。打开教务系统网站,查看源代码,保存即可。

Nginx 配置

假设我们要使用 xk.csust.xuab.net 作为反代域名。那么要搭建反向代理,处理首页,简单的配置是:

server {
    listen 0.0.0.0:80;
    server_name xk.csust.xuab.net;
    
    location /default.html {
        root /var/www/xk.csust.xuab.net;
    }
    location = / {
        rewrite ^ /default.html break;
        root /var/www/xk.csust.xuab.net;
    }
    location / {
        proxy_http_version 1.1;
        proxy_pass http://jwc.csust.edu.cn; 
    }
}

如此便实现了我们要的功能。

但其实还不够。我想替换网页上的字符串,确保网页上的链接都能接管处理;我还想让教务处的网站重定向回去,不由我代理;想把文件下载也跳转回去,免得消耗我的宽带和流量;想添加 robots.txt 告知搜索引擎不要收录等等。因而我实际使用的版本更接近:

upstream xksrv {
    server 210.43.177.10:80 weight=3 max_fails=2 fail_timeout=1s;
}
server {
    listen 0.0.0.0:443 ssl http2;
    server_name xk.csust.xuab.net;

    add_header Strict-Transport-Security "max-age=32000000; includeSubDomains"; #preload

    location /robots.txt {
        root    /var/www/xk.csust.xuab.net;
    }
    location /jwc {
        return 302 http://jwc.csust.edu.cn$request_uri;
    }
    location /default.html {
        root /var/www/xk.csust.xuab.net;
    }
    location /images/index_bgright.gif {
        root /var/www/xk.csust.xuab.net;
    }
    location ~ ^(/default.aspx|/index.aspx) {
        #rewrite ^/(.*) / redirect;
        rewrite ^ /default.html break;
        root /var/www/xk.csust.xuab.net;
    }
    location /_data/down {
        return 302 http://xk.csust.edu.cn$request_uri; #:8080
    }
    #location ~ /(.*)(\.doc|\.xls|\.ppt) {
    #    rewrite ^/(.*) http://jwc.csust.edu.cn/$1 redirect;
    #}
    location = / {
        #return 403;
        rewrite ^ /default.html break;
        root /var/www/xk.csust.xuab.net;
    }
    location / {
        proxy_http_version 1.1;
        proxy_set_header Host jwc.csust.edu.cn;
        proxy_pass http://xksrv; 
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header User-Agent "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko";

        sub_filter_once off;
        sub_filter http://www.csust.edu.cn:8080 https://xk.csust.xuab.net;
        sub_filter http://www.csust.edu.cn:8081 https://xk.csust.xuab.net;
        sub_filter http://jwc.csust.edu.cn:8080 https://xk.csust.xuab.net;
        sub_filter http://xk.csust.edu.cn:8080 https://xk.csust.xuab.net;
        sub_filter http://jwc.csust.edu.cn https://xk.csust.xuab.net;
        sub_filter http://xk.csust.edu.cn https://xk.csust.xuab.net;
        sub_filter http://210.43.177.10 https://xk.csust.xuab.net;
        sub_filter http://113.240.233.5 https://xk.csust.xuab.net;
        sub_filter http://222.240.152.233 https://xk.csust.xuab.net;
        sub_filter http://210.43.188.42 https://xk.csust.xuab.net;
        sub_filter http://210.43.177.11 https://xk.csust.xuab.net;
        sub_filter http://10.64.6.5 https://xk.csust.xuab.net;
    }
}

结语

很可惜我写这篇文章的时候,特别版已经失效了。我只是觉得这个思路很有价值(黄婆卖瓜,哈哈),希望能启发到大家。失效的只是这一个特例,不变的是规律,是好奇心和探索欲。事实上,即使只是教务系统的服务器或网址,仍然有鲜为人知的秘密,大家可以自己去发现。

这篇文章带出两个点:抢课和反向代理。接下来,我会撰写我所知的高效抢课的诀窍,或者更详细的搭建学校网站反向代理的教程。如果想看的话可以下面评论回复,要不然我可能就放鸽子了(理直气壮)。

添加新评论

已有 15 条评论
  1. 其实除了这个之外,还有一个尚未被发现的、可用的老版本教务管理系统!期待你的发现!

    1. @亦之扩展?

    2. @Bro.Xu不是教务扩展系统,另外也不是80端口。👀

  2. sharic richard sharic richard

    教务系统登陆界面奇怪的是如果用浏览器的自动表单保存密码,下回自动输入的密码总是不正确,还要手动重输一遍才行,也不知教务系统的这个诡异现象是怎么造成的,还是故意配置成这样的?

    1. sharic richard sharic richard

      @sharic richard最奇怪的是自动填充密码,并不提示密码错误只是显示未知错误,表明自动填充的密码应该也是对的.不知哪里出了问题?

    2. @sharic richard你可以研究一下那个登录表单,有点意思,或者说有毒。

  3. sharic richard sharic richard

    有没有什么方法可以探测学校内网中到底有多少隐藏的网站呢?

    1. @sharic richard你可以扫一遍全段 IP 的 80/443 端口嘛

    2. sharic richard sharic richard

      @Bro.Xu博主,你服务器时间忘校验了?还是故意混淆评论时间?

    3. @sharic richard感谢指出,这是我所用的主题模板的一个 BUG。暂且做了一个临时修正。

  4. 华三工程师名不虚传(

    1. @hugefiver看来你是想知道学宝特别版是怎么做的了(

    2. huo小明 huo小明

      @Bro.Xu我也想知道

  5. yan大五 yan大五

    大佬别咕,等着捡干货呢@(你懂的)

    1. @yan大五真捧场啊@(你懂的)