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://github.com/abh/geodns 30* https://github.com/baidu/bfe 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://github.com/fcambus/statzone 45* https://github.com/benschw/dns-clb-go 46* https://github.com/corny/dnscheck for <http://public-dns.info/> 47* https://github.com/miekg/unbound 48* https://github.com/miekg/exdns 49* https://dnslookup.org 50* https://github.com/looterz/grimd 51* https://github.com/phamhongviet/serf-dns 52* https://github.com/mehrdadrad/mylg 53* https://github.com/bamarni/dockness 54* https://github.com/fffaraz/microdns 55* https://github.com/ipdcode/hades <https://jd.com> 56* https://github.com/StackExchange/dnscontrol/ 57* https://www.dnsperf.com/ 58* https://dnssectest.net/ 59* https://github.com/oif/apex 60* https://github.com/jedisct1/dnscrypt-proxy 61* https://github.com/jedisct1/rpdns 62* https://github.com/xor-gate/sshfp 63* https://github.com/rs/dnstrace 64* https://blitiri.com.ar/p/dnss ([github mirror](https://github.com/albertito/dnss)) 65* https://render.com 66* https://github.com/peterzen/goresolver 67* https://github.com/folbricht/routedns 68* https://domainr.com/ 69* https://zonedb.org/ 70* https://router7.org/ 71* https://github.com/fortio/dnsping 72* https://github.com/Luzilla/dnsbl_exporter 73* https://github.com/bodgit/tsig 74* https://github.com/v2fly/v2ray-core (test only) 75* https://kuma.io/ 76 77 78Send pull request if you want to be listed here. 79 80# Features 81 82* UDP/TCP queries, IPv4 and IPv6 83* RFC 1035 zone file parsing ($INCLUDE, $ORIGIN, $TTL and $GENERATE (for all record types) are supported 84* Fast 85* Server side programming (mimicking the net/http package) 86* Client side programming 87* DNSSEC: signing, validating and key generation for DSA, RSA, ECDSA and Ed25519 88* EDNS0, NSID, Cookies 89* AXFR/IXFR 90* TSIG, SIG(0) 91* DNS over TLS (DoT): encrypted connection between client and server over TCP 92* DNS name compression 93 94Have fun! 95 96Miek Gieben - 2010-2012 - <miek@miek.nl> 97DNS Authors 2012- 98 99# Building 100 101This library uses Go modules and uses semantic versioning. Building is done with the `go` tool, so 102the following should work: 103 104 go get github.com/miekg/dns 105 go build github.com/miekg/dns 106 107## Examples 108 109A short "how to use the API" is at the beginning of doc.go (this also will show when you call `godoc 110github.com/miekg/dns`). 111 112Example programs can be found in the `github.com/miekg/exdns` repository. 113 114## Supported RFCs 115 116*all of them* 117 118* 103{4,5} - DNS standard 119* 1348 - NSAP record (removed the record) 120* 1982 - Serial Arithmetic 121* 1876 - LOC record 122* 1995 - IXFR 123* 1996 - DNS notify 124* 2136 - DNS Update (dynamic updates) 125* 2181 - RRset definition - there is no RRset type though, just []RR 126* 2537 - RSAMD5 DNS keys 127* 2065 - DNSSEC (updated in later RFCs) 128* 2671 - EDNS record 129* 2782 - SRV record 130* 2845 - TSIG record 131* 2915 - NAPTR record 132* 2929 - DNS IANA Considerations 133* 3110 - RSASHA1 DNS keys 134* 3123 - APL record 135* 3225 - DO bit (DNSSEC OK) 136* 340{1,2,3} - NAPTR record 137* 3445 - Limiting the scope of (DNS)KEY 138* 3597 - Unknown RRs 139* 403{3,4,5} - DNSSEC + validation functions 140* 4255 - SSHFP record 141* 4343 - Case insensitivity 142* 4408 - SPF record 143* 4509 - SHA256 Hash in DS 144* 4592 - Wildcards in the DNS 145* 4635 - HMAC SHA TSIG 146* 4701 - DHCID 147* 4892 - id.server 148* 5001 - NSID 149* 5155 - NSEC3 record 150* 5205 - HIP record 151* 5702 - SHA2 in the DNS 152* 5936 - AXFR 153* 5966 - TCP implementation recommendations 154* 6605 - ECDSA 155* 6725 - IANA Registry Update 156* 6742 - ILNP DNS 157* 6840 - Clarifications and Implementation Notes for DNS Security 158* 6844 - CAA record 159* 6891 - EDNS0 update 160* 6895 - DNS IANA considerations 161* 6944 - DNSSEC DNSKEY Algorithm Status 162* 6975 - Algorithm Understanding in DNSSEC 163* 7043 - EUI48/EUI64 records 164* 7314 - DNS (EDNS) EXPIRE Option 165* 7477 - CSYNC RR 166* 7828 - edns-tcp-keepalive EDNS0 Option 167* 7553 - URI record 168* 7858 - DNS over TLS: Initiation and Performance Considerations 169* 7871 - EDNS0 Client Subnet 170* 7873 - Domain Name System (DNS) Cookies 171* 8080 - EdDSA for DNSSEC 172* 8499 - DNS Terminology 173* 8659 - DNS Certification Authority Authorization (CAA) Resource Record 174* 8914 - Extended DNS Errors 175* 8976 - Message Digest for DNS Zones (ZONEMD RR) 176 177## Loosely Based Upon 178 179* ldns - <https://nlnetlabs.nl/projects/ldns/about/> 180* NSD - <https://nlnetlabs.nl/projects/nsd/about/> 181* Net::DNS - <http://www.net-dns.org/> 182* GRONG - <https://github.com/bortzmeyer/grong> 183