1[![Build Status](https://travis-ci.org/miekg/dns.svg?branch=master)](https://travis-ci.org/miekg/dns) 2[![Code Coverage](https://img.shields.io/codecov/c/github/miekg/dns/master.svg)](https://codecov.io/github/miekg/dns?branch=master) 3[![Go Report Card](https://goreportcard.com/badge/github.com/miekg/dns)](https://goreportcard.com/report/miekg/dns) 4[![](https://godoc.org/github.com/miekg/dns?status.svg)](https://godoc.org/github.com/miekg/dns) 5 6# Alternative (more granular) approach to a DNS library 7 8> Less is more. 9 10Complete and usable DNS library. All Resource Records are supported, including the DNSSEC types. 11It follows a lean and mean philosophy. If there is stuff you should know as a DNS programmer there 12isn't a convenience function for it. Server side and client side programming is supported, i.e. you 13can build servers and resolvers with it. 14 15We try to keep the "master" branch as sane as possible and at the bleeding edge of standards, 16avoiding breaking changes wherever reasonable. We support the last two versions of Go. 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://github.com/fcambus/statzone 46* https://github.com/benschw/dns-clb-go 47* https://github.com/corny/dnscheck for <http://public-dns.info/> 48* https://namesmith.io 49* https://github.com/miekg/unbound 50* https://github.com/miekg/exdns 51* https://dnslookup.org 52* https://github.com/looterz/grimd 53* https://github.com/phamhongviet/serf-dns 54* https://github.com/mehrdadrad/mylg 55* https://github.com/bamarni/dockness 56* https://github.com/fffaraz/microdns 57* http://kelda.io 58* https://github.com/ipdcode/hades <https://jd.com> 59* https://github.com/StackExchange/dnscontrol/ 60* https://www.dnsperf.com/ 61* https://dnssectest.net/ 62* https://dns.apebits.com 63* https://github.com/oif/apex 64* https://github.com/jedisct1/dnscrypt-proxy 65* https://github.com/jedisct1/rpdns 66* https://github.com/xor-gate/sshfp 67* https://github.com/rs/dnstrace 68* https://blitiri.com.ar/p/dnss ([github mirror](https://github.com/albertito/dnss)) 69* https://github.com/semihalev/sdns 70* https://render.com 71* https://github.com/peterzen/goresolver 72* https://github.com/folbricht/routedns 73 74Send pull request if you want to be listed here. 75 76# Features 77 78* UDP/TCP queries, IPv4 and IPv6 79* RFC 1035 zone file parsing ($INCLUDE, $ORIGIN, $TTL and $GENERATE (for all record types) are supported 80* Fast 81* Server side programming (mimicking the net/http package) 82* Client side programming 83* DNSSEC: signing, validating and key generation for DSA, RSA, ECDSA and Ed25519 84* EDNS0, NSID, Cookies 85* AXFR/IXFR 86* TSIG, SIG(0) 87* DNS over TLS (DoT): encrypted connection between client and server over TCP 88* DNS name compression 89 90Have fun! 91 92Miek Gieben - 2010-2012 - <miek@miek.nl> 93DNS Authors 2012- 94 95# Building 96 97Building is done with the `go` tool. If you have setup your GOPATH correctly, the following should 98work: 99 100 go get github.com/miekg/dns 101 go build github.com/miekg/dns 102 103## Examples 104 105A short "how to use the API" is at the beginning of doc.go (this also will show when you call `godoc 106github.com/miekg/dns`). 107 108Example programs can be found in the `github.com/miekg/exdns` repository. 109 110## Supported RFCs 111 112*all of them* 113 114* 103{4,5} - DNS standard 115* 1348 - NSAP record (removed the record) 116* 1982 - Serial Arithmetic 117* 1876 - LOC record 118* 1995 - IXFR 119* 1996 - DNS notify 120* 2136 - DNS Update (dynamic updates) 121* 2181 - RRset definition - there is no RRset type though, just []RR 122* 2537 - RSAMD5 DNS keys 123* 2065 - DNSSEC (updated in later RFCs) 124* 2671 - EDNS record 125* 2782 - SRV record 126* 2845 - TSIG record 127* 2915 - NAPTR record 128* 2929 - DNS IANA Considerations 129* 3110 - RSASHA1 DNS keys 130* 3225 - DO bit (DNSSEC OK) 131* 340{1,2,3} - NAPTR record 132* 3445 - Limiting the scope of (DNS)KEY 133* 3597 - Unknown RRs 134* 403{3,4,5} - DNSSEC + validation functions 135* 4255 - SSHFP record 136* 4343 - Case insensitivity 137* 4408 - SPF record 138* 4509 - SHA256 Hash in DS 139* 4592 - Wildcards in the DNS 140* 4635 - HMAC SHA TSIG 141* 4701 - DHCID 142* 4892 - id.server 143* 5001 - NSID 144* 5155 - NSEC3 record 145* 5205 - HIP record 146* 5702 - SHA2 in the DNS 147* 5936 - AXFR 148* 5966 - TCP implementation recommendations 149* 6605 - ECDSA 150* 6725 - IANA Registry Update 151* 6742 - ILNP DNS 152* 6840 - Clarifications and Implementation Notes for DNS Security 153* 6844 - CAA record 154* 6891 - EDNS0 update 155* 6895 - DNS IANA considerations 156* 6944 - DNSSEC DNSKEY Algorithm Status 157* 6975 - Algorithm Understanding in DNSSEC 158* 7043 - EUI48/EUI64 records 159* 7314 - DNS (EDNS) EXPIRE Option 160* 7477 - CSYNC RR 161* 7828 - edns-tcp-keepalive EDNS0 Option 162* 7553 - URI record 163* 7858 - DNS over TLS: Initiation and Performance Considerations 164* 7871 - EDNS0 Client Subnet 165* 7873 - Domain Name System (DNS) Cookies 166* 8080 - EdDSA for DNSSEC 167* 8499 - DNS Terminology 168 169## Loosely Based Upon 170 171* ldns - <https://nlnetlabs.nl/projects/ldns/about/> 172* NSD - <https://nlnetlabs.nl/projects/nsd/about/> 173* Net::DNS - <http://www.net-dns.org/> 174* GRONG - <https://github.com/bortzmeyer/grong> 175