From 56de361ded34d4a35a05d177d1043faaab41453f Mon Sep 17 00:00:00 2001 From: Joseph Thacker Date: Wed, 2 Oct 2019 06:14:51 +0000 Subject: [PATCH 1/2] Added a saveGrep feature. Only saves responses if grep finds a value in current response --- README.mkd | 1 + args.go | 8 ++++++++ main.go | 22 ++++++++++++++++++++++ 3 files changed, 31 insertions(+) diff --git a/README.mkd b/README.mkd index a76bf25..233ecc4 100644 --- a/README.mkd +++ b/README.mkd @@ -142,6 +142,7 @@ Options: -s, --savestatus Save only responses with specific status code -v, --verbose Verbose mode -X, --method HTTP method (default: GET) + -g, --saveGrep Save only if grep string in response Defaults: pathsFile: ./paths diff --git a/args.go b/args.go index 90cca52..3587f4a 100644 --- a/args.go +++ b/args.go @@ -47,6 +47,7 @@ type config struct { headers headerArgs followLocation bool method string + saveGrep string saveStatus saveStatusArgs timeout int verbose bool @@ -91,6 +92,11 @@ func processArgs() config { flag.StringVar(&method, "method", "GET", "") flag.StringVar(&method, "X", "GET", "") + // saveGrep param + saveGrep := "" + flag.StringVar(&saveGrep, "saveGrep", "", "") + flag.StringVar(&saveGrep, "g", "", "") + // savestatus params var saveStatus saveStatusArgs flag.Var(&saveStatus, "savestatus", "") @@ -148,6 +154,7 @@ func processArgs() config { headers: headers, followLocation: followLocation, method: method, + saveGrep: saveGrep, saveStatus: saveStatus, timeout: timeout, requester: requesterFn, @@ -177,6 +184,7 @@ func init() { h += " -t, --timeout Set the HTTP timeout (default: 10000)\n" h += " -v, --verbose Verbose mode\n" h += " -X, --method HTTP method (default: GET)\n\n" + h += " -g, --saveGrep Save only if grep string in response\n\n" h += "Defaults:\n" h += " pathsFile: ./paths\n" diff --git a/main.go b/main.go index f2a73a2..ebfcb4f 100644 --- a/main.go +++ b/main.go @@ -2,9 +2,11 @@ package main import ( "bufio" + "bytes" "fmt" "net/url" "os" + "os/exec" "path/filepath" "sync" "time" @@ -84,6 +86,7 @@ func main() { owg.Add(1) go func() { for res := range responses { + if len(c.saveStatus) > 0 && !c.saveStatus.Includes(res.statusCode) { continue } @@ -94,6 +97,25 @@ func main() { } path, err := res.save(c.output, c.noHeaders) + if len(c.saveGrep) > 0 { + var cmd *exec.Cmd + cmd = exec.Command("grep", "--color", c.saveGrep, path) + var out bytes.Buffer + cmd.Stdout = &out + cmd.Stderr = os.Stderr + cmd.Run() + strOut := out.String() + if len(strOut) == 0 { + err := os.Remove(path) + + if err != nil { + fmt.Println(err) + return + } + continue + } + } + if err != nil { fmt.Fprintf(os.Stderr, "failed to save file: %s\n", err) } From 169c3195a0106fdd3d861158a6d1aacaa51c14b6 Mon Sep 17 00:00:00 2001 From: Joseph Thacker Date: Wed, 2 Oct 2019 06:58:52 +0000 Subject: [PATCH 2/2] meg + gf = megf. adding -savegf. only saves if gf finds a hit --- README.mkd | 2 +- args.go | 14 +++++++------- main.go | 4 ++-- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/README.mkd b/README.mkd index 233ecc4..46c48f8 100644 --- a/README.mkd +++ b/README.mkd @@ -142,7 +142,7 @@ Options: -s, --savestatus Save only responses with specific status code -v, --verbose Verbose mode -X, --method HTTP method (default: GET) - -g, --saveGrep Save only if grep string in response + -g, --savegf Save only if gf finds something Defaults: pathsFile: ./paths diff --git a/args.go b/args.go index 3587f4a..01e0e3e 100644 --- a/args.go +++ b/args.go @@ -47,7 +47,7 @@ type config struct { headers headerArgs followLocation bool method string - saveGrep string + savegf string saveStatus saveStatusArgs timeout int verbose bool @@ -92,10 +92,10 @@ func processArgs() config { flag.StringVar(&method, "method", "GET", "") flag.StringVar(&method, "X", "GET", "") - // saveGrep param - saveGrep := "" - flag.StringVar(&saveGrep, "saveGrep", "", "") - flag.StringVar(&saveGrep, "g", "", "") + // savegf param + savegf := "" + flag.StringVar(&savegf, "savegf", "", "") + flag.StringVar(&savegf, "g", "", "") // savestatus params var saveStatus saveStatusArgs @@ -154,7 +154,7 @@ func processArgs() config { headers: headers, followLocation: followLocation, method: method, - saveGrep: saveGrep, + savegf: savegf, saveStatus: saveStatus, timeout: timeout, requester: requesterFn, @@ -184,7 +184,7 @@ func init() { h += " -t, --timeout Set the HTTP timeout (default: 10000)\n" h += " -v, --verbose Verbose mode\n" h += " -X, --method HTTP method (default: GET)\n\n" - h += " -g, --saveGrep Save only if grep string in response\n\n" + h += " -g, --savegf Save only if gf finds something\n\n" h += "Defaults:\n" h += " pathsFile: ./paths\n" diff --git a/main.go b/main.go index ebfcb4f..d503b60 100644 --- a/main.go +++ b/main.go @@ -97,9 +97,9 @@ func main() { } path, err := res.save(c.output, c.noHeaders) - if len(c.saveGrep) > 0 { + if len(c.savegf) > 0 { var cmd *exec.Cmd - cmd = exec.Command("grep", "--color", c.saveGrep, path) + cmd = exec.Command("gf", c.savegf, path) var out bytes.Buffer cmd.Stdout = &out cmd.Stderr = os.Stderr