• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

[Go]基于GoProxy实现HTTP代理,拦截智慧树注入JS实现自动刷课

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

这几天各种网课都快截至了,鄙人也是被逼得烦的不行

虽然网上有刷课的浏览器,但是每次换个地方就得重新拷贝一边

所以就想能不能写一个HTTP代理,丢在服务器上,自己不管到哪里,设置上代理就能刷课

从本质来说其实都是注入JS,跟浏览器相比换个注入方式而已

既然要写HTTP代理,第一时间就想到了大名鼎鼎的GoProxy

首先执行go get来下载库

go get github.com/snail007/goproxy

  接下来,不多说直接上代码

package main
import (
    "strings"
    "fmt"
    "bytes"
    "net/http"
    "io/ioutil"
    "github.com/elazarl/goproxy"
)
var Code string = `<script>function query() {
    if ($("#popbox_title").length > 0) {
        $(".popboxes_close")[0].click();
        console.log('关闭窗口');
    }

    if ($("#chapterList .time_ico.fl").nextAll()[2].children[0].style.width === "100%" || $("video").get(0).ended) {
        var num = -1;
        var text = $("#chapterList .time_ico.fl").parent().nextAll()[++num].id;
        while (text === "" ||
               text.substr(0, 5) != "video" ||
               text.substr(0, 7) === "video-0") {
            text = $("#chapterList .time_ico.fl").parent().nextAll()[++num].id;
        }
        $("#chapterList .time_ico.fl").parent().nextAll()[num].click();
    }

    if ($("video").length > 0 && $("video").get(0).playbackRate != 1.5) {
        console.log('切换到1.5倍');
        $(".speedTab15")[0].click();
    }

    if ($("video").get(0).volume > 0) {
        $(".volumeIcon").click();
    }
}
var divObj=document.createElement("div"); 
divObj.innerHTML='<h1 style="font-size:25px;">技术支持来自:Lee QQ:925776327<br>项目整体开源,欢迎Fork和Star <a href="https://github.com/leeli73/ZhiHuiShuShuaKe">github.com/leeli73/ZhiHuiShuShuaKe</a><br>你也可以通过Tampermonkey、Fiddler等软件,向网页中注入上面Git项目中的Code.js<br>本地版程序下载(无访问限制版)<a href="https://www.lanzous.com/i237o3e">点击下载</a></h1>'; 
var first=document.body.firstChild;
document.body.insertBefore(divObj,first);
window.setInterval(query, 1000);</script>`

func main() {
    proxy := goproxy.NewProxyHttpServer()
    fmt.Println("Proxy已经成功启动...智慧树课程页面监控中...")
    fmt.Println("请将你的浏览器代理设定为127.0.0.1:8080  设置方法请百度,很简单!")
    fmt.Println("支持在内网和外网通过IP访问代理服务")
    fmt.Println("技术支持来自:Lee QQ:925776327")
    fmt.Println("项目整体开源,欢迎Fork和Star 项目地址:https://github.com/leeli73/ZhiHuiShuShuaKe")
    fmt.Println("你也可以通过Tampermonkey、Fiddler等软件,向网页中注入上面Git项目中的Code.js")
    fmt.Println("如果需要Server版,请联系上面的QQ")
    fmt.Println("如果出现报错代码请不用管他。程序会自动热重启。")
    proxy.Verbose = false
    
    //proxy.OnRequest().HandleConnect(goproxy.AlwaysMitm)
    proxy.OnRequest().DoFunc(
        func(r *http.Request,ctx *goproxy.ProxyCtx)(*http.Request,*http.Response) {
            r.Header.Set("X-GoProxy","yxorPoG-X")
            //fmt.Println(r.Host)
            if r.URL.Scheme == "https" && !strings.Contains(r.Host,"zhihuishu"){
                return r,goproxy.NewResponse(r,
                    goproxy.ContentTypeText,http.StatusForbidden,
                    "为了保证服务器的能为每个同学提供刷课服务,服务器已经关闭了你的这个HTTPS请求!tips:人心险恶,为了保证你的数据安全,请尽量避免使用未知的Proxy。")
            }
            if !strings.Contains(r.Host,"zhihuishu"){
                return r,goproxy.NewResponse(r,
                    goproxy.ContentTypeText,http.StatusForbidden,
                    "为了保证服务器的能为每个同学提供刷课服务,服务器已经关闭了你的这个HTTP请求!tips:人心险恶,为了保证你的数据安全,请尽量避免使用未知的Proxy。")
            }
            return r,nil
    })
    /*proxy.OnRequest(goproxy.DstHostIs("eol.qhu.edu.cn")).DoFunc(
    func(r *http.Request,ctx *goproxy.ProxyCtx)(*http.Request,*http.Response) {
        return r,goproxy.NewResponse(r,
            goproxy.ContentTypeText,http.StatusForbidden,
            "Don't waste your time!")
    })*/
    proxy.OnResponse().DoFunc(
        func(r *http.Response, ctx *goproxy.ProxyCtx)*http.Response{
            if strings.Contains(r.Request.URL.Path,"learning/videoList"){
                bs, _ := ioutil.ReadAll(r.Body)
                sbs := string(bs)
                sbs = sbs + Code
                fmt.Println("发现课程页面,刷课代码已经成功注入!")
                bs = []byte(sbs)
                r.Body = ioutil.NopCloser(bytes.NewReader(bs))
            }
            return r
    })
    http.ListenAndServe(":8080", proxy)
}

然后就可以啦,我默认禁止了部分请求来降低服务器负载,大家可以自主删除

下面再给大家附带一个编译好的二进制版

https://www.lanzous.com/i237o3e


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
在Go1.15中variinterface{}=3会有额外堆内存分配吗发布时间:2022-07-10
下一篇:
6-3读写json文件,将go数据编码为json文件发布时间:2022-07-10
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap