
Client DNS con retry in Go
Basato su miekg/dns e liberamente ispirato a bogdanovich/dns_resolver.
$ go get github.com/projectdiscovery/retryabledns
Dopo questo comando, il codice sorgente della libreria retryabledns si troverà nel tuo $GOPATH
/etc/hostsPer 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 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/dnsutilhttps://github.com/rs/dnstrace