Torna agli aggiornamenti
New releaseSep 3, 2026

retryabledns v1.0.116

Client DNS con retry in Go

Condividi

Risolutore DNS retryable

Basato su miekg/dns e liberamente ispirato a bogdanovich/dns_resolver.

Caratteristiche

  • Supporta sia i resolver DNS predefiniti di sistema che quelli forniti dall'utente
  • Riprova le richieste DNS in caso di errori I/O, timeout o guasti di rete
  • Consente tipi di query arbitrari
  • Risoluzione con resolver casuali
  • Compatibile con vari protocolli resolver DNS (TCP, UDP, DoH e DoT)

Uso con go get

$ go get github.com/projectdiscovery/retryabledns

Dopo questo comando, il codice sorgente della libreria retryabledns si troverà nel tuo $GOPATH

Elaborazione del file /etc/hosts

Per impostazione predefinita, la libreria elabora il file /etc/hosts fino a un numero massimo di righe per motivi di efficienza (4096). Se la tua configurazione ha un file hosts più grande e desideri elaborare più righe, puoi facilmente configurare questo limite modificando la variabile hostsfile.MaxLines.

Per esempio:

hostsfile.MaxLines = 10000  // Ora la libreria elaborerà fino a 10000 righe dal file hosts

Esempio

Esempio di utilizzo:

package main

import (
    "log"

    "github.com/projectdiscovery/retryabledns"
    "github.com/miekg/dns"
)

func main() {
    // Richiede una lista di resolver.
    // I protocolli validi sono "udp", "tcp", "doh", "dot". Il predefinito è "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)

    // Tipi di query: dns.TypeA, dns.TypeNS, dns.TypeCNAME, dns.TypeSOA, dns.TypePTR, dns.TypeMX, dns.TypeANY
    // dns.TypeTXT, dns.TypeAAAA, dns.TypeSRV (da github.com/miekg/dns)
    // retryabledns.ErrRetriesExceeded verrà restituito se un risultato non viene ottenuto entro il numero massimo di tentativi
    dnsResponses, err := dnsClient.Query(hostname, dns.TypeA)
    if err != nil {
        log.Fatal(err)
    }

    log.Println(dnsResponses)
}

Crediti:

  • https://github.com/lixiangzhong/dnsutil
  • https://github.com/rs/dnstrace

Categorie