From 5196d950551350767f58b3e30c559c451a7ef98a Mon Sep 17 00:00:00 2001 From: Daniel Mason Date: Thu, 11 Nov 2021 21:33:19 +1300 Subject: [PATCH] THREAD IT --- main.go | 62 +++++++++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 15 deletions(-) diff --git a/main.go b/main.go index 7d13c4c..bb38beb 100644 --- a/main.go +++ b/main.go @@ -1,8 +1,11 @@ package main import ( + "bufio" "fmt" "log" + "os" + "sync" "time" "github.com/likexian/whois" @@ -10,36 +13,45 @@ import ( ) func main() { + var wg sync.WaitGroup + + i := 1 + for r := 'a'; r <= 'z'; r++ { + wg.Add(1) + go runForLetter(&wg, i, fmt.Sprintf("%c", r)) + i++ + } + + wg.Wait() + log.Printf("Done!") +} + +func runForLetter(wg *sync.WaitGroup, id int, letter string) { + defer wg.Done() freeDomains := []string{} domainsToCheck := generateInput() for _, domain := range domainsToCheck { - resp, err := checkDomain(domain) + log.Printf("Checking " + letter + domain + ".nz") + resp, err := checkDomain(letter + domain + ".nz") if err != nil { log.Fatal(err) } if resp { - log.Printf("%s is free!", domain) - freeDomains = append(freeDomains, domain) - } else { - log.Printf("%s is not free!", domain) + freeDomains = append(freeDomains, letter+domain+".nz") } } - log.Println() - log.Println("Free Domains:") - - for _, v := range freeDomains { - log.Print(v) - } + writeLinesToFile(letter, freeDomains) + fmt.Printf("Worker %v: Finished\n", id) } // checkDomain - True if available, error/false if not func checkDomain(domain string) (bool, error) { - time.Sleep(time.Second * 5) + time.Sleep(time.Millisecond * 100) resultRaw, err := whois.Whois(domain, "whois.srs.net.nz") if err != nil { return false, err @@ -60,11 +72,31 @@ func checkDomain(domain string) (bool, error) { func generateInput() []string { output := []string{} - for o := 'a'; o <= 'z'; o++ { - for r := 'a'; r <= 'z'; r++ { - output = append(output, fmt.Sprintf("%c", o)+fmt.Sprintf("%c", r)) + for r := 'a'; r <= 'z'; r++ { + for x := 'a'; x <= 'z'; x++ { + output = append(output, fmt.Sprintf("%c", r)+fmt.Sprintf("%c", x)) } } return output } + +func writeLinesToFile(letter string, str []string) { + if len(str) == 0 { + return + } + + file, err := os.OpenFile(letter+".char.txt", os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644) + + if err != nil { + log.Fatalf("failed creating file: %s", err) + } + datawriter := bufio.NewWriter(file) + + for _, data := range str { + _, _ = datawriter.WriteString(data + "\n") + } + + datawriter.Flush() + file.Close() +}