-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmain.go
104 lines (79 loc) · 1.8 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
package main
import (
"bufio"
"fmt"
"log"
"os"
"sync"
"time"
"github.com/likexian/whois"
"github.com/likexian/whois-parser"
)
func main() {
var wg sync.WaitGroup
freeDomains := []string{}
i := 1
for r := 'a'; r <= 'z'; r++ {
wg.Add(1)
go runForLetter(&wg, &freeDomains, fmt.Sprintf("%c", r))
i++
}
wg.Wait()
writeLinesToFile(freeDomains)
log.Printf("Done!")
}
func runForLetter(wg *sync.WaitGroup, freeDomains *[]string, letter string) {
defer wg.Done()
domainsToCheck := generateInput()
for _, domain := range domainsToCheck {
log.Printf("Checking " + letter + domain + ".nz")
resp, err := checkDomain(letter + domain + ".nz")
if err != nil {
log.Fatal(err)
}
if resp {
*freeDomains = append(*freeDomains, letter+domain+".nz")
}
}
fmt.Printf("Worker %s: Finished\n", letter)
}
// checkDomain - True if available, error/false if not
func checkDomain(domain string) (bool, error) {
time.Sleep(time.Millisecond * 150)
resultRaw, err := whois.Whois(domain, "whois.srs.net.nz")
if err != nil {
return false, err
}
_, err = whoisparser.Parse(resultRaw)
if err != nil {
if err.Error() == "whoisparser: domain is not found" {
return true, nil
}
return false, err
}
return false, err
}
func generateInput() []string {
output := []string{}
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(str []string) {
if len(str) == 0 {
return
}
file, err := os.OpenFile("3char.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()
}