Voltar às atualizações
New releaseSep 3, 2026

retryabledns v1.0.116

Cliente DNS com retry em Go

Compartilhar

Resolvedor DNS com novas tentativas

Baseado em miekg/dns e livremente inspirado por bogdanovich/dns_resolver.

Características

  • Suporta tanto os resolvedores DNS padrão do sistema quanto os fornecidos pelo usuário
  • Repete as requisições DNS em caso de erros de I/O, timeouts ou falhas de rede
  • Permite tipos de consulta arbitrários
  • Resolução com resolvedores aleatórios
  • Compatível com vários protocolos de resolvedor DNS (TCP, UDP, DoH e DoT)

Usando go get

$ go get github.com/projectdiscovery/retryabledns

Após este comando, o código-fonte da biblioteca retryabledns estará no seu $GOPATH

Processamento do arquivo /etc/hosts

Por padrão, a biblioteca processa o arquivo /etc/hosts até um número máximo de linhas por eficiência (4096). Se a sua configuração tiver um arquivo hosts maior e você quiser processar mais linhas, você pode facilmente configurar esse limite ajustando a variável hostsfile.MaxLines.

Por exemplo:

hostsfile.MaxLines = 10000  // Now the library will process up to 10000 lines from the hosts file

Exemplo

Exemplo de uso:

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éditos:

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

Categorias