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 97This library uses Go modules and uses semantic versioning. Building is done with the `go` tool, so 98the following should work: 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* 3123 - APL record 131* 3225 - DO bit (DNSSEC OK) 132* 340{1,2,3} - NAPTR record 133* 3445 - Limiting the scope of (DNS)KEY 134* 3597 - Unknown RRs 135* 403{3,4,5} - DNSSEC + validation functions 136* 4255 - SSHFP record 137* 4343 - Case insensitivity 138* 4408 - SPF record 139* 4509 - SHA256 Hash in DS 140* 4592 - Wildcards in the DNS 141* 4635 - HMAC SHA TSIG 142* 4701 - DHCID 143* 4892 - id.server 144* 5001 - NSID 145* 5155 - NSEC3 record 146* 5205 - HIP record 147* 5702 - SHA2 in the DNS 148* 5936 - AXFR 149* 5966 - TCP implementation recommendations 150* 6605 - ECDSA 151* 6725 - IANA Registry Update 152* 6742 - ILNP DNS 153* 6840 - Clarifications and Implementation Notes for DNS Security 154* 6844 - CAA record 155* 6891 - EDNS0 update 156* 6895 - DNS IANA considerations 157* 6944 - DNSSEC DNSKEY Algorithm Status 158* 6975 - Algorithm Understanding in DNSSEC 159* 7043 - EUI48/EUI64 records 160* 7314 - DNS (EDNS) EXPIRE Option 161* 7477 - CSYNC RR 162* 7828 - edns-tcp-keepalive EDNS0 Option 163* 7553 - URI record 164* 7858 - DNS over TLS: Initiation and Performance Considerations 165* 7871 - EDNS0 Client Subnet 166* 7873 - Domain Name System (DNS) Cookies 167* 8080 - EdDSA for DNSSEC 168* 8499 - DNS Terminology 169 170## Loosely Based Upon 171 172* ldns - <https://nlnetlabs.nl/projects/ldns/about/> 173* NSD - <https://nlnetlabs.nl/projects/nsd/about/> 174* Net::DNS - <http://www.net-dns.org/> 175* GRONG - <https://github.com/bortzmeyer/grong> 176