From 79aa24fc8fead3fbc0adbce5ee6750f04fbfeb49 Mon Sep 17 00:00:00 2001 From: shadow1ng Date: Wed, 12 May 2021 10:57:12 +0800 Subject: [PATCH] =?UTF-8?q?webtitle=20=E5=A2=9E=E5=8A=A0gzip=E8=A7=A3?= =?UTF-8?q?=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Plugins/webtitle.go | 37 ++++++++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/Plugins/webtitle.go b/Plugins/webtitle.go index c1d7e9f..005e855 100644 --- a/Plugins/webtitle.go +++ b/Plugins/webtitle.go @@ -2,6 +2,7 @@ package Plugins import ( "bytes" + "compress/gzip" "fmt" "github.com/shadow1ng/fscan/WebScan" "github.com/shadow1ng/fscan/WebScan/lib" @@ -9,6 +10,7 @@ import ( "golang.org/x/net/html/charset" "golang.org/x/text/encoding/simplifiedchinese" "golang.org/x/text/transform" + "io" "io/ioutil" "net/http" "net/url" @@ -132,7 +134,10 @@ func geturl(info *common.HostInfo, flag int, CheckData []WebScan.CheckDatas) (er if err == nil { defer resp.Body.Close() var title string - body, _ := ioutil.ReadAll(resp.Body) + body, err := getRespBody(resp) + if err != nil { + return err, "", CheckData + } if flag != 2 { re := regexp.MustCompile("(?im)(.*)") find := re.FindSubmatch(body) @@ -214,3 +219,33 @@ func Decodegbk(s []byte) ([]byte, error) { // GBK解码 } return d, nil } + +func getRespBody(oResp *http.Response) ([]byte, error) { + var body []byte + if oResp.Header.Get("Content-Encoding") == "gzip" { + gr, err := gzip.NewReader(oResp.Body) + if err != nil { + return nil, err + } + defer gr.Close() + for { + buf := make([]byte, 1024) + n, err := gr.Read(buf) + if err != nil && err != io.EOF { + return nil, err + } + if n == 0 { + break + } + body = append(body, buf...) + } + } else { + raw, err := ioutil.ReadAll(oResp.Body) + if err != nil { + return nil, err + } + defer oResp.Body.Close() + body = raw + } + return body, nil +}