
عميل DNS قابل لإعادة المحاولة بلغة Go
مبني على miekg/dns ومستوحى بحرية من bogdanovich/dns_resolver.
$ go get github.com/projectdiscovery/retryabledns
بعد هذا الأمر، سيكون كود مكتبة retryabledns في $GOPATH الخاص بك
/etc/hostsافتراضيًا، تعالج المكتبة ملف /etc/hosts حتى حد أقصى من الأسطر من أجل الكفاءة (4096). إذا كان إعدادك يحتوي على ملف hosts أكبر وتريد معالجة المزيد من الأسطر، يمكنك بسهولة ضبط هذا الحد عن طريق تعديل المتغير hostsfile.MaxLines.
على سبيل المثال:
hostsfile.MaxLines = 10000 // Now the library will process up to 10000 lines from the hosts file
مثال الاستخدام:
package main
import (
"log"
"github.com/projectdiscovery/retryabledns"
"github.com/miekg/dns"
)
func main() {
// It requires a list of resolvers.
// Valid protocols are "udp", "tcp", "doh", "dot". Default are "udp".
resolvers := []string{"8.8.8.8:53", "8.8.4.4:53", "tcp:1.1.1.1"}
retries := 2
hostname := "hackerone.com"
dnsClient, err := retryabledns.New(resolvers, retries)
if err != nil {
log.Fatal(err)
}
ips, err := dnsClient.Resolve(hostname)
if err != nil {
log.Fatal(err)
}
log.Println(ips)
// Query Types: dns.TypeA, dns.TypeNS, dns.TypeCNAME, dns.TypeSOA, dns.TypePTR, dns.TypeMX, dns.TypeANY
// dns.TypeTXT, dns.TypeAAAA, dns.TypeSRV (from github.com/miekg/dns)
// retryabledns.ErrRetriesExceeded will be returned if a result isn't returned in max retries
dnsResponses, err := dnsClient.Query(hostname, dns.TypeA)
if err != nil {
log.Fatal(err)
}
log.Println(dnsResponses)
}
الاعتمادات:
https://github.com/lixiangzhong/dnsutilhttps://github.com/rs/dnstrace