Skip to content

Commit df6e19c

Browse files
committed
支持多DNS服务器和多线程
1 parent c5e6e68 commit df6e19c

File tree

1 file changed

+30
-4
lines changed

1 file changed

+30
-4
lines changed

src/main.go

Lines changed: 30 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,26 @@ import (
88
_ "github.com/miekg/dns"
99
"io"
1010
"log"
11+
"net"
1112
"os"
1213
"strings"
14+
"sync"
1315
)
1416

1517
const DEBUG = false
1618
const A uint16 = 0x01
19+
const MaxThread int = 100
20+
21+
var tmpChain = make(chan struct{}, MaxThread)
22+
var waitGroup sync.WaitGroup
1723

1824
func GetAName(DNSServer, domain string) bool {
25+
defer waitGroup.Done()
1926
msg := new(dns.Msg)
2027
msg.SetQuestion(dns.Fqdn(domain), dns.TypeA)
28+
tmpChain <- struct{}{}
2129
in, err := dns.Exchange(msg, DNSServer+":53")
30+
<-tmpChain
2231
if err != nil {
2332
if DEBUG {
2433
log.Printf("[x] %s", err)
@@ -38,7 +47,7 @@ func usage() {
3847
fmt.Fprintf(os.Stderr,
3948
`GoDigDomain: A Domain Name Burst Tool
4049
41-
Usage: gdd -dn Domain [-ds DNSServer] [-dt DictFile]
50+
Usage: gdd -dn Domain [-ds DNSServer(s)] [-dt DictFile]
4251
4352
Options:
4453
`)
@@ -53,11 +62,23 @@ func isFileExist(path string) bool {
5362
return true
5463
}
5564

65+
func createDNSServerList(DNSServers string) []string {
66+
dnsServers := strings.Split(DNSServers, ",")
67+
ret := make([]string, len(dnsServers))
68+
for i := 0; i < len(dnsServers); i++ {
69+
if net.ParseIP(dnsServers[i]) == nil {
70+
continue
71+
}
72+
ret[i] = dnsServers[i]
73+
}
74+
return ret
75+
}
76+
5677
func main() {
5778
log.SetFlags(log.Lshortfile)
5879
flag.Usage = usage
5980

60-
dnsServer := flag.String("ds", "114.114.114.114", "DNS服务器")
81+
dnsServer := flag.String("ds", "114.114.114.114", "DNS服务器(多个服务器用逗号[,]隔开)")
6182
domain := flag.String("dn", "", "域名")
6283
dict := flag.String("dt", "./dict.txt", "域名字典")
6384
flag.Parse()
@@ -82,6 +103,8 @@ func main() {
82103
defer f.Close()
83104

84105
lines := bufio.NewReader(f)
106+
dnsServers := createDNSServerList(*dnsServer)
107+
85108
for {
86109
line, _, err := lines.ReadLine()
87110
if err != nil {
@@ -96,7 +119,10 @@ func main() {
96119
return
97120
}
98121
domainPrefix := string(line)
99-
GetAName(*dnsServer, fmt.Sprintf("%s.%s", strings.TrimPrefix(domainPrefix, "\n\r"), *domain))
122+
for i := 0; i < len(dnsServers); i++ {
123+
waitGroup.Add(1)
124+
go GetAName(dnsServers[i], fmt.Sprintf("%s.%s", strings.TrimPrefix(domainPrefix, "\n\r"), *domain))
125+
}
100126
}
101-
127+
waitGroup.Wait()
102128
}

0 commit comments

Comments
 (0)