Skip to content
Go
Branch: master
Clone or download
Latest commit e20ffa3 Dec 10, 2014
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
idn Fix import paths Oct 7, 2015
.gitignore gitignore update Oct 15, 2013
.travis.yml Travis: add -v to go test to catch stalling tests Oct 6, 2015
AUTHORS add AUTHOR file Feb 10, 2014
CONTRIBUTORS Changed logic to typeswitch and added comments. Sep 20, 2014
COPYRIGHT
LICENSE Update the copy right for the original GO files May 12, 2013
README.md HINFO does not need downcasing for DNSSEC Oct 6, 2015
client.go client: SetReadDeadline after write, before read Oct 6, 2015
client_test.go Remove TestSingleInflight as per #250 Sep 15, 2015
clientconfig.go A bunch of golint fixes Feb 19, 2015
clientconfig_test.go Use %v as the format arg for errors Feb 26, 2015
defaults.go More documentation for IsDomainName Sep 22, 2015
dns.go golint fixes Aug 23, 2015
dns_test.go Enable CAA parsing Jun 16, 2015
dnssec.go HINFO does not need downcasing for DNSSEC Oct 6, 2015
dnssec_keygen.go Refactor DNSSEC to use crypto.{PrivateKey,Signer} Aug 19, 2015
dnssec_keyscan.go Refactor DNSSEC to use crypto.{PrivateKey,Signer} Aug 19, 2015
dnssec_privkey.go Refactor DNSSEC to use crypto.{PrivateKey,Signer} Aug 19, 2015
dnssec_test.go Fix (*HINFO).len() and HINFO canonicalization in rawSignatureData Oct 5, 2015
doc.go Updating doc.go Sep 17, 2015
dyn_test.go Remove all copyright notices Sep 11, 2014
edns.go golint fixes Aug 23, 2015
edns_test.go Fixup tests Oct 8, 2014
example_test.go Fix import paths Oct 7, 2015
format.go Typo in comment Jan 13, 2015
fuzz_test.go Check for l.err in $INCLUDE Aug 8, 2015
labels.go Small doc cleanups Aug 23, 2015
labels_test.go Revert "Use gofmt to simplify code" Feb 26, 2015
msg.go dns.Msg.Unpack with mismatch in bytes is now an error Oct 7, 2015
nsecx.go A bunch of golint fixes Feb 19, 2015
nsecx_test.go More test clean up Feb 26, 2015
parse_test.go Add Dedup function Aug 24, 2015
privaterr.go Add Dedup function Aug 24, 2015
privaterr_test.go Fix import paths Oct 7, 2015
rawmsg.go Remove all copyright notices Sep 11, 2014
remote_test.go Add remote test Aug 22, 2015
sanitize.go some memory optimisations Aug 31, 2015
sanitize_test.go less memory use Aug 31, 2015
scanner.go
server.go Refactor server shutdown to call Close() on conn and sync on srv.started Oct 6, 2015
server_test.go Set high timeouts in server_test.go not to fail on slow boxes and cat… Oct 6, 2015
sig0.go
sig0_test.go Refactor DNSSEC to use crypto.{PrivateKey,Signer} Aug 19, 2015
singleinflight.go Implement outstanding query detection. Aug 24, 2013
tlsa.go If the Matching Type is 1 or 2 we need to return a hash. Feb 24, 2015
tsig.go Move all docs to docs.go Feb 19, 2015
types.go Fix (*HINFO).len() and HINFO canonicalization in rawSignatureData Oct 5, 2015
types_test.go Add tests for LOC record String() generation and fix small problems Dec 10, 2014
udp.go golint fixes Aug 23, 2015
udp_linux.go Remove all copyright notices Sep 11, 2014
udp_other.go Remove all copyright notices Sep 11, 2014
udp_windows.go Export UDP interfaces Mar 9, 2015
update.go Move all docs to docs.go Feb 19, 2015
update_test.go CAA now also be tested in TestDynamicUpdateParsing Jun 19, 2015
xfr.go Make err explicit and drop the deref on *master Sep 23, 2015
xfr_test.go Merge sidnxfr_test.go into xfr_test.go Aug 23, 2015
zgenerate.go A some length check to $GENERATE modifiers Aug 8, 2015
zscan.go Update ParseZone() documentation Oct 5, 2015
zscan_rr.go golint fixes Aug 23, 2015

README.md

Build Status

Alternative (more granular) approach to a DNS library

Less is more.

Complete and usable DNS library. All widely used Resource Records are supported, including the DNSSEC types. It follows a lean and mean philosophy. If there is stuff you should know as a DNS programmer there isn't a convenience function for it. Server side and client side programming is supported, i.e. you can build servers and resolvers with it.

If you like this, you may also be interested in:

Goals

  • KISS;
  • Fast;
  • Small API, if its easy to code in Go, don't make a function for it.

Users

A not-so-up-to-date-list-that-may-be-actually-current:

Send pull request if you want to be listed here.

Features

  • UDP/TCP queries, IPv4 and IPv6;
  • RFC 1035 zone file parsing ($INCLUDE, $ORIGIN, $TTL and $GENERATE (for all record types) are supported;
  • Fast:
    • Reply speed around ~ 80K qps (faster hardware results in more qps);
    • Parsing RRs ~ 100K RR/s, that's 5M records in about 50 seconds;
  • Server side programming (mimicking the net/http package);
  • Client side programming;
  • DNSSEC: signing, validating and key generation for DSA, RSA and ECDSA;
  • EDNS0, NSID;
  • AXFR/IXFR;
  • TSIG, SIG(0);
  • DNS name compression;
  • Depends only on the standard library.

Have fun!

Miek Gieben - 2010-2012 - miek@miek.nl

Building

Building is done with the go tool. If you have setup your GOPATH correctly, the following should work:

go get github.com/miekg/dns
go build github.com/miekg/dns

Examples

A short "how to use the API" is at the beginning of doc.go (this also will show when you call godoc github.com/miekg/dns).

Example programs can be found in the github.com/miekg/exdns repository.

Supported RFCs

all of them

  • 103{4,5} - DNS standard
  • 1348 - NSAP record (removed the record)
  • 1982 - Serial Arithmetic
  • 1876 - LOC record
  • 1995 - IXFR
  • 1996 - DNS notify
  • 2136 - DNS Update (dynamic updates)
  • 2181 - RRset definition - there is no RRset type though, just []RR
  • 2537 - RSAMD5 DNS keys
  • 2065 - DNSSEC (updated in later RFCs)
  • 2671 - EDNS record
  • 2782 - SRV record
  • 2845 - TSIG record
  • 2915 - NAPTR record
  • 2929 - DNS IANA Considerations
  • 3110 - RSASHA1 DNS keys
  • 3225 - DO bit (DNSSEC OK)
  • 340{1,2,3} - NAPTR record
  • 3445 - Limiting the scope of (DNS)KEY
  • 3597 - Unknown RRs
  • 4025 - IPSECKEY
  • 403{3,4,5} - DNSSEC + validation functions
  • 4255 - SSHFP record
  • 4343 - Case insensitivity
  • 4408 - SPF record
  • 4509 - SHA256 Hash in DS
  • 4592 - Wildcards in the DNS
  • 4635 - HMAC SHA TSIG
  • 4701 - DHCID
  • 4892 - id.server
  • 5001 - NSID
  • 5155 - NSEC3 record
  • 5205 - HIP record
  • 5702 - SHA2 in the DNS
  • 5936 - AXFR
  • 5966 - TCP implementation recommendations
  • 6605 - ECDSA
  • 6725 - IANA Registry Update
  • 6742 - ILNP DNS
  • 6840 - Clarifications and Implementation Notes for DNS Security
  • 6844 - CAA record
  • 6891 - EDNS0 update
  • 6895 - DNS IANA considerations
  • 6975 - Algorithm Understanding in DNSSEC
  • 7043 - EUI48/EUI64 records
  • 7314 - DNS (EDNS) EXPIRE Option
  • 7553 - URI record
  • xxxx - EDNS0 DNS Update Lease (draft)

Loosely based upon

  • ldns
  • NSD
  • Net::DNS
  • GRONG

TODO

  • privatekey.Precompute() when signing?
  • Last remaining RRs: APL, ATMA, A6, NSAP and NXT.
  • Missing in parsing: ISDN, UNSPEC, NSAP and ATMA.
  • NSEC(3) cover/match/closest enclose.
  • Replies with TC bit are not parsed to the end.
You can’t perform that action at this time.