mirror of
https://github.com/idanoo/go-domain-checker
synced 2025-07-01 13:42:17 +00:00
104 lines
1.8 KiB
Go
104 lines
1.8 KiB
Go
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()
|
|
}
|