dnsr

package module
v0.0.0-...-5c4552a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 2, 2016 License: MIT Imports: 7 Imported by: 0

README

dnsr

build status godoc

Iterative DNS resolver for Go.

The Resolve method on dnsr.Resolver queries DNS for given name and type (A, NS, CNAME, etc.). The resolver caches responses for queries, and liberally (aggressively?) returns DNS records for a given name, not waiting for slow or broken name servers.

This code leans heavily on Miek Gieben’s excellent DNS library, and is currently in production use at Domainr.

Install

go get github.com/domainr/dnsr

Usage

package main

import (
  "fmt"
  "github.com/domainr/dnsr"
)

func main() {
  r := dnsr.New(10000)
  for _, rr := range r.Resolve("google.com", "TXT") {
    fmt.Println(rr.String())
  }
}

Documentation

Development

Run go generate in Go 1.4+ to refresh the root zone hint file. Pull requests welcome.

© 2014–2015 nb.io, LLC

Documentation

Index

Constants

View Source
const MinCacheCapacity = 1000
View Source
const NameCollision = "127.0.53.53"

ICANN specifies that DNS servers should return the special value 127.0.53.53 for A record queries of TLDs that have recently entered the root zone, that have a high likelyhood of colliding with private DNS names. The record returned is a notices to network administrators to adjust their DNS configuration. https://www.icann.org/resources/pages/name-collision-2013-12-06-en#127.0.53.53

Variables

View Source
var (
	Timeout        = 2000 * time.Millisecond
	MaxRecursion   = 10
	MaxNameservers = 2
	MaxIPs         = 2

	NXDOMAIN        = fmt.Errorf("NXDOMAIN")
	ErrMaxRecursion = fmt.Errorf("maximum recursion depth reached: %d", MaxRecursion)
	ErrMaxIPs       = fmt.Errorf("maximum name server IPs queried: %d", MaxIPs)
	ErrNoARecords   = fmt.Errorf("no A records found for name server")
	ErrNoResponse   = fmt.Errorf("no responses received")
)
View Source
var (
	DebugLogger io.Writer
)

Functions

This section is empty.

Types

type RR

type RR struct {
	Name  string
	Type  string
	Value string
}

RR represents a DNS resource record.

func (*RR) String

func (rr *RR) String() string

String returns a string representation of an RR in zone-file format.

type RRs

type RRs []RR

type Resolver

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

Resolver implements a primitive, non-recursive, caching DNS resolver.

func New

func New(capacity int) *Resolver

New initializes a Resolver with the specified cache size.

func (*Resolver) Resolve

func (r *Resolver) Resolve(qname string, qtype string) RRs

Resolve finds DNS records of type qtype for the domain qname. For nonexistent domains (NXDOMAIN), it will return an empty, non-nil slice. Specify an empty string in qtype to receive any DNS records found (currently A, AAAA, NS, CNAME, SOA, and TXT).

func (*Resolver) ResolveErr

func (r *Resolver) ResolveErr(qname string, qtype string) (RRs, error)

ResolveErr finds DNS records of type qtype for the domain qname. For nonexistent domains, it will return an NXDOMAIN error. Specify an empty string in qtype to receive any DNS records found (currently A, AAAA, NS, CNAME, SOA, and TXT).

Directories

Path Synopsis
cmd

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL