Retour aux mises à jour
New releaseSep 3, 2026

retryabledns v1.0.116

Client DNS réessayable en Go

Partager

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/dnsutil
  • https://github.com/rs/dnstrace

Catégories