From a6ccee210537232664b3cf98e7600909d7076e8d Mon Sep 17 00:00:00 2001 From: Emile Date: Fri, 1 Nov 2019 18:56:19 +0100 Subject: simple working basic setup --- src/main.go | 114 ++++++++++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 95 insertions(+), 19 deletions(-) (limited to 'src/main.go') diff --git a/src/main.go b/src/main.go index 3b6ef05..f64df59 100644 --- a/src/main.go +++ b/src/main.go @@ -1,42 +1,118 @@ package main import ( - "bufio" "fmt" "log" - "os" + "net/http" + "strings" ) func main() { // pase the command line aguments registerFlags() - // read the wordlist - lines, err := readWordlist(wordlist) + fmt.Printf(red("asd")) + fmt.Printf(boldRed("asd")) + fmt.Printf(green("asd")) + fmt.Printf(boldGreen("asd")) + fmt.Printf(yellow("asd")) + fmt.Printf(boldYellow("asd")) + fmt.Printf(blue("asd")) + fmt.Printf(boldBlue("asd")) + fmt.Printf(magenta("asd")) + fmt.Printf(boldMagenta("asd")) + fmt.Printf(cyan("asd")) + fmt.Printf(boldCyan("asd") + "\n") + + // read the wordlist from a file + log.Println("reading the wordlist from a file") + wordlist, err := readWordlist(wordlist) if err != nil { log.Println(err) } + log.Println(green("[+] ") + "done reading the wordlist from a file") + + // define a channel to store the wordlist in + wordlistChannel := make(chan string) + + // define a channel in which the response gets written into from the go + // routines + printChannel := make(chan Response) + + // write all the words from the wordlist into the wordlistChannel + go func() { + for _, line := range wordlist { + wordlistChannel <- line + } + }() + + fmt.Println(url) + + go func() { + var i int + for { + // read a response from the printChannel for further usage + response := <-printChannel + + // define a postfix: a string attached to the end of all printed + // string set in the section filtering the status code cases + var postfix string + var prefix string - for i, line := range lines { - fmt.Printf("%d %s\n", i, string(line)) + // define what color should be used to print the individual status + // codes + var statusCode string + switch response.StatusCode { + case 200: + prefix = "\r\033[K" + statusCode = green(fmt.Sprintf("%d", response.StatusCode)) + postfix = "\n" + case 404: + statusCode = red(fmt.Sprintf("%d", response.StatusCode)) + postfix = "\033[K\r" + } + + // print the foo + fmt.Printf("%s%.7d: %s %s%s", prefix, i, statusCode, response.FuzzWord, postfix) + i++ + } + }() + + if threads > 1 { + fmt.Println("threaded") + httpRequest(wordlistChannel, printChannel) + } else { + + // loop over all the threads starting a go routine fetching a word from + // the wordlistChannel, making the request and inserting the result into + // the printChannel + for i := 0; i < threads; i++ { + go httpRequest(wordlistChannel, printChannel) + } } + } -func readWordlist(wordlistPath string) ([]string, error) { - file, err := os.Open(wordlistPath) - if err != nil { - return nil, err - } - defer file.Close() +func httpRequest(wordlistChannel chan string, printChannel chan Response) { + for { + // replace the first instance of "FUZZ" in the given url by the next + // value from the wordlistChannel + fuzzWord := <-wordlistChannel + requestURL := strings.Replace(url, "FUZZ", fuzzWord, 1) - scanner := bufio.NewScanner(file) - scanner.Split(bufio.ScanLines) + // make the http get request + resp, err := http.Get("https://" + requestURL) + if err != nil { + log.Println(err) + } - var lines []string + // define the response + var response = Response{ + StatusCode: resp.StatusCode, + FuzzWord: fuzzWord, + } - for scanner.Scan() { - lines = append(lines, scanner.Text()) + // insert the response into the print channel for further printing + printChannel <- response } - - return lines, nil } -- cgit 1.4.1