mosajjal / dnsclient

A simple DNS Client API for Go
GNU General Public License v2.0
3 stars 1 forks source link

dnsclient

import "github.com/mosajjal/dnsclient"

Package dnsclient provides a minimal DNS client library. It provides native support for - Dns Over UDP - DNS Over TCP - DNS Over HTTPS (DoH) - DNS Over TLS (DoT) - DNS Over QUIC (DoQ)

Index

type ClassicDNS

ClassicDNS provides functionality to create DNS over UDP, DNS over TCP and DNS over TLS

type ClassicDNS struct {
    // contains filtered or unexported fields
}

func (ClassicDNS) Query

func (c ClassicDNS) Query(ctx context.Context, q *dns.Msg) (responses []dns.RR, rtt time.Duration, err error)

Query takes a dns message and returns a list of resources

type Client

Client Provides a unified interface for DNS queries

func main() {
    msg := dns.Msg{}
    msg.RecursionDesired = true
    msg.Question = []dns.Question{{
        Name:   "example.com.",
        Qtype:  dns.StringToType["A"],
        Qclass: dns.ClassINET,
    }}

    addr := &net.UDPAddr{
        IP:   net.IPv4(1, 1, 1, 1),
        Port: 53,
    }
    c, _ := dnsclient.NewClassicDNS(addr, false, false, false)
    response, ttr, err := c.Query(context.Background(), &msg)
    fmt.Printf("Query: %v, Response: %v, Time to Respond: %s, Error: %v", msg, response, ttr, err)
}
type Client interface {
    Query(context.Context, *dns.Msg) ([]dns.RR, time.Duration, error)
}

func New

func New(uri string, skipVerify bool) (Client, error)

New creates a DNS Client by parsing a URI and returning the appropriate client for it URI string could look like below:

- udp://1.1.1.1:53
- udp6://[2606:4700:4700::1111]:53
- tcp://9.9.9.9:5353
- https://dns.adguard.com
- quic://dns.adguard.com:8853
- tls://dns.adguard.com:853

func NewClassicDNS

func NewClassicDNS(server net.Addr, UseTCP bool, UseTLS bool, SkipVerify bool) (Client, error)

NewClassicDNS provides a client interface which you can query on

func NewDoHClient

func NewDoHClient(server url.URL, SkipVerify bool) (Client, error)

NewDoHClient creates a new DoH client

func NewDoQClient

func NewDoQClient(server string, SkipVerify bool) (Client, error)

NewDoQClient creates a new DoQ client

type DoHClient

DoHClient encapsulates all functions and attributes for a DoH client

type DoHClient struct {
    Session httptrace.ClientTrace
    URL     url.URL
    // contains filtered or unexported fields
}

func (DoHClient) Query

func (c DoHClient) Query(ctx context.Context, msg *dns.Msg) ([]dns.RR, time.Duration, error)

Query performs a DoH query

type DoQClient

DoQClient encapsulates all functions and attributes for a DoH client

type DoQClient struct {
    // contains filtered or unexported fields
}

func (DoQClient) Query

func (c DoQClient) Query(ctx context.Context, msg *dns.Msg) (responses []dns.RR, rtt time.Duration, err error)

Query performs the DNS transaction

Generated by gomarkdoc