THREAD IT

This commit is contained in:
Daniel Mason 2021-11-11 21:33:19 +13:00
parent 9000f70940
commit 5196d95055
Signed by: idanoo
GPG key ID: 387387CDBC02F132

62
main.go
View file

@ -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()
}