
New releaseSep 3, 2026
retryabledns v1.0.116
Client DNS réessayable en Go
Résolveur DNS réessayable
Basé sur miekg/dns et librement inspiré de bogdanovich/dns_resolver.
Fonctionnalités
- Prend en charge à la fois les résolveurs DNS par défaut du système et ceux fournis par l'utilisateur
- Relance les requêtes DNS en cas d'erreurs d'E/S, de dépassements de délai ou de pannes réseau
- Autorise des types de requêtes arbitraires
- Résolution avec des résolveurs aléatoires
- Compatible avec différents protocoles de résolveur DNS (TCP, UDP, DoH et DoT)
Utilisation de go get
$ go get github.com/projectdiscovery/retryabledns
Après cette commande, le code source de la bibliothèque retryabledns se trouvera dans votre $GOPATH
Traitement du fichier /etc/hosts
Par défaut, la bibliothèque traite le fichier /etc/hosts jusqu'à un nombre maximal de lignes pour des raisons d'efficacité (4096). Si votre configuration possède un fichier hosts plus volumineux et que vous souhaitez traiter plus de lignes, vous pouvez facilement configurer cette limite en ajustant la variable hostsfile.MaxLines.
Par exemple :
hostsfile.MaxLines = 10000 // Now the library will process up to 10000 lines from the hosts file
Exemple
Exemple d'utilisation :
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)
}
Crédits :
https://github.com/lixiangzhong/dnsutilhttps://github.com/rs/dnstrace