package main import ( "fmt" "log" ) func main() { // pase the command line aguments registerFlags() log.Printf("%s Done reading flags", green("[+]")) // read the wordlist from a file wordlist, err := readWordlist(wordlist) if err != nil { log.Println(err) } log.Printf("%s Done reading the wordlist", green("[+]")) // define channels storing the wordlist and the responses resulting from the // requests wordlistChannel := make(chan string) printChannel := make(chan Response) // write into the wordlist channel and read out of the print channel go writeWordlistToChannel(wordlistChannel, wordlist) go printResponses(printChannel) log.Printf("%s Starting the http handlers", cyan("[+]")) // handle one or more theads if threads <= 1 { log.Printf("%s 1 thread", yellow("[+]")) httpRequest(wordlistChannel, printChannel) } else { log.Printf("%s multiple threads", yellow("[+]")) // 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++ { log.Printf("%s Starting Thread %d\n", cyan("[i]"), i) go httpRequest(wordlistChannel, printChannel) } } fmt.Println(len(wordlistChannel)) for { if len(wordlistChannel) > 0 { break } } }