README.md
1[![Build Status](https://travis-ci.org/miekg/dns.svg?branch=master)](https://travis-ci.org/miekg/dns)
2[![](https://godoc.org/github.com/miekg/dns?status.svg)](https://godoc.org/github.com/miekg/dns)
3
4# Alternative (more granular) approach to a DNS library
5
6> Less is more.
7
8Complete and usable DNS library. All widely used Resource Records are
9supported, including the DNSSEC types. It follows a lean and mean philosophy.
10If there is stuff you should know as a DNS programmer there isn't a convenience
11function for it. Server side and client side programming is supported, i.e. you
12can build servers and resolvers with it.
13
14We try to keep the "master" branch as sane as possible and at the bleeding edge
15of standards, avoiding breaking changes wherever reasonable. We support the last
16two versions of Go, currently: 1.7 and 1.8.
17
18# Goals
19
20* KISS;
21* Fast;
22* Small API. If it's easy to code in Go, don't make a function for it.
23
24# Users
25
26A not-so-up-to-date-list-that-may-be-actually-current:
27
28* https://github.com/coredns/coredns
29* https://cloudflare.com
30* https://github.com/abh/geodns
31* http://www.statdns.com/
32* http://www.dnsinspect.com/
33* https://github.com/chuangbo/jianbing-dictionary-dns
34* http://www.dns-lg.com/
35* https://github.com/fcambus/rrda
36* https://github.com/kenshinx/godns
37* https://github.com/skynetservices/skydns
38* https://github.com/hashicorp/consul
39* https://github.com/DevelopersPL/godnsagent
40* https://github.com/duedil-ltd/discodns
41* https://github.com/StalkR/dns-reverse-proxy
42* https://github.com/tianon/rawdns
43* https://mesosphere.github.io/mesos-dns/
44* https://pulse.turbobytes.com/
45* https://play.google.com/store/apps/details?id=com.turbobytes.dig
46* https://github.com/fcambus/statzone
47* https://github.com/benschw/dns-clb-go
48* https://github.com/corny/dnscheck for http://public-dns.info/
49* https://namesmith.io
50* https://github.com/miekg/unbound
51* https://github.com/miekg/exdns
52* https://dnslookup.org
53* https://github.com/looterz/grimd
54* https://github.com/phamhongviet/serf-dns
55* https://github.com/mehrdadrad/mylg
56* https://github.com/bamarni/dockness
57* https://github.com/fffaraz/microdns
58* http://quilt.io
59* https://github.com/ipdcode/hades (JD.COM)
60* https://github.com/StackExchange/dnscontrol/
61* https://www.dnsperf.com/
62* https://dnssectest.net/
63
64Send pull request if you want to be listed here.
65
66# Features
67
68* UDP/TCP queries, IPv4 and IPv6;
69* RFC 1035 zone file parsing ($INCLUDE, $ORIGIN, $TTL and $GENERATE (for all record types) are supported;
70* Fast:
71 * Reply speed around ~ 80K qps (faster hardware results in more qps);
72 * Parsing RRs ~ 100K RR/s, that's 5M records in about 50 seconds;
73* Server side programming (mimicking the net/http package);
74* Client side programming;
75* DNSSEC: signing, validating and key generation for DSA, RSA and ECDSA;
76* EDNS0, NSID, Cookies;
77* AXFR/IXFR;
78* TSIG, SIG(0);
79* DNS over TLS: optional encrypted connection between client and server;
80* DNS name compression;
81* Depends only on the standard library.
82
83Have fun!
84
85Miek Gieben - 2010-2012 - <miek@miek.nl>
86
87# Building
88
89Building is done with the `go` tool. If you have setup your GOPATH
90correctly, the following should work:
91
92 go get github.com/miekg/dns
93 go build github.com/miekg/dns
94
95## Examples
96
97A short "how to use the API" is at the beginning of doc.go (this also will show
98when you call `godoc github.com/miekg/dns`).
99
100Example programs can be found in the `github.com/miekg/exdns` repository.
101
102## Supported RFCs
103
104*all of them*
105
106* 103{4,5} - DNS standard
107* 1348 - NSAP record (removed the record)
108* 1982 - Serial Arithmetic
109* 1876 - LOC record
110* 1995 - IXFR
111* 1996 - DNS notify
112* 2136 - DNS Update (dynamic updates)
113* 2181 - RRset definition - there is no RRset type though, just []RR
114* 2537 - RSAMD5 DNS keys
115* 2065 - DNSSEC (updated in later RFCs)
116* 2671 - EDNS record
117* 2782 - SRV record
118* 2845 - TSIG record
119* 2915 - NAPTR record
120* 2929 - DNS IANA Considerations
121* 3110 - RSASHA1 DNS keys
122* 3225 - DO bit (DNSSEC OK)
123* 340{1,2,3} - NAPTR record
124* 3445 - Limiting the scope of (DNS)KEY
125* 3597 - Unknown RRs
126* 403{3,4,5} - DNSSEC + validation functions
127* 4255 - SSHFP record
128* 4343 - Case insensitivity
129* 4408 - SPF record
130* 4509 - SHA256 Hash in DS
131* 4592 - Wildcards in the DNS
132* 4635 - HMAC SHA TSIG
133* 4701 - DHCID
134* 4892 - id.server
135* 5001 - NSID
136* 5155 - NSEC3 record
137* 5205 - HIP record
138* 5702 - SHA2 in the DNS
139* 5936 - AXFR
140* 5966 - TCP implementation recommendations
141* 6605 - ECDSA
142* 6725 - IANA Registry Update
143* 6742 - ILNP DNS
144* 6840 - Clarifications and Implementation Notes for DNS Security
145* 6844 - CAA record
146* 6891 - EDNS0 update
147* 6895 - DNS IANA considerations
148* 6975 - Algorithm Understanding in DNSSEC
149* 7043 - EUI48/EUI64 records
150* 7314 - DNS (EDNS) EXPIRE Option
151* 7828 - edns-tcp-keepalive EDNS0 Option
152* 7553 - URI record
153* 7858 - DNS over TLS: Initiation and Performance Considerations (draft)
154* 7873 - Domain Name System (DNS) Cookies (draft-ietf-dnsop-cookies)
155* xxxx - EDNS0 DNS Update Lease (draft)
156
157## Loosely based upon
158
159* `ldns`
160* `NSD`
161* `Net::DNS`
162* `GRONG`
163