retryabledns v1.0.116
New releaseSep 3, 2026Go library for retryable DNS resolution supporting TCP, UDP, DoH, and DoT with 2026-9-3 12:17:48 Author: kitploit.com(查看原文) 阅读量:4 收藏

New releaseSep 3, 2026

Go library for retryable DNS resolution supporting TCP, UDP, DoH, and DoT with configurable retries, random resolver selection, and arbitrary query types for network reconnaissance.

Based on miekg/dns and freely inspired by bogdanovich/dns_resolver.

Features

  • Supports both system default DNS resolvers and user-provided ones
  • Retries DNS requests in case of I/O errors, timeouts, or network failures
  • Allows arbitrary query types
  • Resolution with random resolvers
  • Compatible with various DNS resolver protocols (TCP, UDP, DoH, and DoT)

Using go get

$ go get github.com/projectdiscovery/retryabledns

After this command retryabledns library source will be in your $GOPATH

/etc/hosts file processing

By default, the library processes the /etc/hosts file up to a maximum amount of lines for efficiency (4096). If your setup has a larger hosts file and you want to process more lines, you can easily configure this limit by adjusting the hostsfile.MaxLines variable.

For example:

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

Example

Usage Example:

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)
}

Credits:

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

Read more

Categories


文章来源: https://kitploit.com/en/posts/github-projectdiscovery-retryabledns-v10116
如有侵权请联系:admin#unsafe.sh