From c5e10c274be457e148f3e7e0c346fd1815a2a355 Mon Sep 17 00:00:00 2001 From: zhengbaoyang Date: Mon, 8 Aug 2016 10:21:27 +0800 Subject: [PATCH] develog --- dump.go | 33 ++++++++++++++++++++++++++------- mitm.go | 29 ++++++++++++++++++++++++----- 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/dump.go b/dump.go index 5629329..4a458f0 100644 --- a/dump.go +++ b/dump.go @@ -12,7 +12,7 @@ import ( "strconv" ) -func httpDump(req *http.Request, resp *http.Response) { +func httpDump(reqDump []byte, resp *http.Response) { defer resp.Body.Close() var respStatusStr string respStatus := resp.StatusCode @@ -27,19 +27,33 @@ func httpDump(req *http.Request, resp *http.Response) { case 5: respStatusStr = Red("<--" + strconv.Itoa(respStatus)) } - fmt.Println(Green("Request:")) - fmt.Printf("%s %s %s\n", Blue(req.Method), req.RequestURI, respStatusStr) + fmt.Println(Green("Request:"), respStatusStr) + ParseReq(reqDump) + /*req, _ := ParseReq(reqDump) + for k, v := range req { + fmt.Println(k, ":::::", v) + }*/ + /*fmt.Printf("%s %s %s\n", Blue(req.Method), req.RequestURI, respStatusStr) for headerName, headerContext := range req.Header { fmt.Printf("%s: %s\n", Blue(headerName), headerContext) - } - if req.Method == "POST" { + }*/ + /*if req.Method == "POST" { fmt.Println(Green("URLEncoded form")) - for k, v := range req.Form { + err := req.ParseForm() + if err != nil { + logger.Println("parseForm error:", err) + } else { + for k, v := range req.Form { + fmt.Printf("%s: %s\n", Blue(k), v) + } + } + values, _ := ParsePostValues(reqDump) + for k, v := range values { fmt.Printf("%s: %s\n", Blue(k), v) } - } + }*/ fmt.Println(Green("Response:")) for headerName, headerContext := range resp.Header { fmt.Printf("%s: %s\n", Blue(headerName), headerContext) @@ -77,3 +91,8 @@ func httpDump(req *http.Request, resp *http.Response) { fmt.Printf("%s%s%s\n", Black("####################"), Cyan("END"), Black("####################")) } + +func ParseReq(b []byte) error { + str := string(b) + +} diff --git a/mitm.go b/mitm.go index edcb998..4817d3a 100644 --- a/mitm.go +++ b/mitm.go @@ -102,6 +102,10 @@ func (hw *HandlerWrapper) DumpHTTPAndHTTPs(resp http.ResponseWriter, req *http.R req.Header.Set("Connection", "Keep-Alive") // handle connection + reqDump, err := httputil.DumpRequest(req, true) + if err != nil { + logger.Println("DumpRequest error ", err) + } connIn, _, err := resp.(http.Hijacker).Hijack() if err != nil { logger.Println("hijack error:", err) @@ -173,17 +177,13 @@ func (hw *HandlerWrapper) DumpHTTPAndHTTPs(resp http.ResponseWriter, req *http.R } if *hw.MyConfig.Monitor { - go httpDump(req, respOut) + go httpDump(reqDump, respOut) } } func (hw *HandlerWrapper) ServeHTTP(resp http.ResponseWriter, req *http.Request) { - err := req.ParseForm() - if err != nil { - logger.Println("parseForm error:", err) - } raddr := *hw.MyConfig.Raddr if len(raddr) != 0 { hw.Forward(resp, req, raddr) @@ -344,3 +344,22 @@ func connectProxyServer(conn net.Conn, addr string) error { } return nil } + +/*func ReadNotDrain(r *http.Request) (content []byte, err error) { + content, err = ioutil.ReadAll(r.Body) + r.Body = io.ReadCloser(bytes.NewBuffer(content)) + return +} + +func ParsePostValues(req *http.Request) (url.Values, error) { + c, err := ReadNotDrain(req) + if err != nil { + return nil, err + } + values, err := url.ParseQuery(string(c)) + if err != nil { + return nil, err + } + return values, nil +} +*/