
New releaseSep 3, 2026
retryabledns v1.0.116
عميل DNS قابل لإعادة المحاولة بلغة Go
محلل DNS قابل لإعادة المحاولة
مبني على miekg/dns ومستوحى بحرية من bogdanovich/dns_resolver.
الميزات
- يدعم كلاً من محللات DNS الافتراضية للنظام وتلك المقدمة من المستخدم
- يعيد محاولة طلبات DNS في حالة أخطاء الإدخال/الإخراج، أو انتهاء المهلة، أو فشل الشبكة
- يسمح بأنواع استعلامات عشوائية
- التحليل باستخدام محللات عشوائية
- متوافق مع بروتوكولات محلل DNS المختلفة (TCP، UDP، DoH، وDoT)
الاستخدام عبر go get
$ 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