1
0
Fork
You've already forked dns
0
forked from miekg/dns
Go DNS library
  • Go 96.7%
  • Roff 3.3%
2025年09月15日 18:16:13 +02:00
.woodpecker pull tip 2025年08月27日 13:16:22 +02:00
cmd Rename testserv to atomdns 2025年09月15日 18:00:30 +02:00
deleg Add the rest of DELEG 2025年09月10日 09:10:07 +02:00
dnsconf Fix tests 2025年09月06日 18:04:45 +02:00
dnstest more 2025年09月08日 21:42:24 +02:00
dnsutil Add Expired function that checks if the zonefile is almost expired 2025年09月14日 14:23:51 +02:00
internal Remove APL record 2025年09月05日 13:54:25 +02:00
svcb deleg, take 3 2025年09月10日 07:38:16 +02:00
testdata
bench_test.go Fix broken things after moving UnpackName to unpack.Name 2025年08月30日 14:11:28 +02:00
ci_test.go Add perf test 2025年09月08日 17:43:28 +02:00
client.go Pull signing out of client 2025年09月02日 16:12:55 +02:00
compare_generate.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
CONTRIBUTORS
copy_generate.go Add the rest of DELEG 2025年09月10日 09:10:07 +02:00
COPYRIGHT Fix copyright 2025年09月04日 13:49:40 +02:00
dane.go Un-export CertificateToDANE 2025年08月16日 12:43:33 +02:00
delegpack.go Add the rest of DELEG 2025年09月10日 09:10:07 +02:00
dns.go deleg, take 3 2025年09月10日 07:38:16 +02:00
dnssec.go Sign a zone 2025年09月14日 12:51:53 +02:00
dnssec_keygen.go More msg_helpers.go to internal/{un,}pack 2025年09月01日 20:22:45 +02:00
dnssec_keyscan.go Fix initial setup 2025年09月14日 08:23:28 +02:00
dnssec_privkey.go More msg_helpers.go to internal/{un,}pack 2025年09月01日 20:22:45 +02:00
dnssec_signer.go Rename Count to Labels 2025年09月06日 18:03:00 +02:00
dnssec_test.go fix tests 2025年09月14日 13:30:26 +02:00
dnstest_generate.go test: allow dnstest primitives also to be used 2025年09月03日 07:15:28 +02:00
dnsutil_generate.go Add header to zdnsutils.go 2025年08月16日 08:30:30 +02:00
doc.go Smaller api and doc updates 2025年08月29日 07:47:10 +02:00
dso_types.go typo 2025年08月17日 21:34:17 +02:00
dsolen_generate.go DSO: add some basic generators 2025年08月16日 10:45:23 +02:00
dsorr_generate.go Generate compare functions 2025年08月23日 09:42:16 +02:00
edns_types.go Add pres format example 2025年09月08日 07:01:55 +02:00
ednsrr_generate.go All EDNS0 options are o not rr in the methods 2025年09月02日 19:05:52 +02:00
errors.go Fix initial setup 2025年09月14日 08:23:28 +02:00
generate.go ResponseWriter can't return private structs 2025年09月02日 21:25:10 +02:00
go.mod Better check if a handler exists 2025年09月14日 08:01:14 +02:00
go.sum Better check if a handler exists 2025年09月14日 08:01:14 +02:00
headerpack.go Split off msg_helpers into pack*.go files, just like packsvcb and packdeleg. 2025年09月03日 07:31:23 +02:00
len_generate.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
LICENSE add status to the readme 2025年08月18日 07:28:14 +02:00
listen_no_socket_options.go clean udp socket stuff 2025年09月01日 14:59:36 +02:00
listen_socket_options.go Fix server startup 2025年09月13日 11:29:12 +02:00
Makefile.release Release 0.0.2 2025年08月18日 15:00:46 +02:00
msg.go Documentation for msg.Hijack 2025年09月10日 16:07:27 +02:00
msg_generate.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
msg_test.go Various cleanups 2025年09月01日 15:05:29 +02:00
nsecpack.go Split off msg_helpers into pack*.go files, just like packsvcb and packdeleg. 2025年09月03日 07:31:23 +02:00
opt.go Preliminary DELEG support bits 2025年08月29日 20:51:46 +02:00
optpack.go return error 2025年09月07日 09:52:17 +02:00
pack_generate.go Lots of churn just to move stuff into internal/pack 2025年08月23日 08:37:09 +02:00
parse_generate.go Add presentation and parsing for EDE 2025年09月03日 21:03:32 +02:00
pool.go Basic for siging are there 2025年09月14日 13:08:58 +02:00
README-dev.md Split out dns.Session to avoid repeating 2025年09月14日 08:17:41 +02:00
README-diff-with-v1.md Remove APL record 2025年09月05日 13:54:25 +02:00
README.md document how axfr is going to look 2025年09月12日 13:10:03 +02:00
response.go Add a prometheus handler 2025年09月08日 17:28:10 +02:00
reverse.go Prepartion work to parse EDNS0 RR from text 2025年09月03日 14:52:06 +02:00
router Add zerr.go 2025年09月14日 08:26:44 +02:00
rr_generate.go Stop generating fields 2025年08月23日 09:41:29 +02:00
scan.go comments 2025年09月03日 19:59:55 +02:00
scan_ednsrr.go Add presentation and parsing for EDE 2025年09月03日 21:03:32 +02:00
scan_rr.go Add Expired function that checks if the zonefile is almost expired 2025年09月14日 14:23:51 +02:00
scan_test.go Add presentation and parsing for EDE 2025年09月03日 21:03:32 +02:00
serve_mux.go Fix copyright 2025年09月04日 13:49:40 +02:00
serve_mux_test.go Skip reflect perf testing by default 2025年08月17日 12:06:55 +02:00
server.go Basic for siging are there 2025年09月14日 13:08:58 +02:00
server_test.go make dnstest.Server better 2025年08月26日 14:53:33 +02:00
sig0.go Pull signing out of client 2025年09月02日 16:12:55 +02:00
sig0_signer.go More msg_helpers.go to internal/{un,}pack 2025年09月01日 20:22:45 +02:00
smimea.go Move more to dnsutil 2025年08月25日 20:26:06 +02:00
sort.go Finally getting a handle on wildcards 2025年09月11日 11:49:53 +02:00
sort_test.go Follow CNAME chains - only 1 chain deep is tested 2025年09月12日 12:54:17 +02:00
string.go Add Expired function that checks if the zonefile is almost expired 2025年09月14日 14:23:51 +02:00
svcbpack.go create unpack.Error/pack.Error 2025年08月30日 15:06:17 +02:00
tlsa.go test: allow dnstest primitives also to be used 2025年09月03日 07:15:28 +02:00
to_be_removed_test.go More msg_helpers.go to internal/{un,}pack 2025年09月01日 20:22:45 +02:00
transfer.go ResponseWriter can't return private structs 2025年09月02日 21:25:10 +02:00
transfer_test.go Pull signing out of client 2025年09月02日 16:12:55 +02:00
transport.go Pull signing out of client 2025年09月02日 16:12:55 +02:00
tsig.go signing: allow for options everywhere 2025年09月02日 07:19:12 +02:00
tsig_signer.go signing: allow for options everywhere 2025年09月02日 07:19:12 +02:00
tsig_test.go Domain -> Name, and a few other things 2025年08月28日 07:09:22 +02:00
types.go Fix resigning logic 2025年09月15日 10:20:41 +02:00
udp.go Split out dns.Session to avoid repeating 2025年09月14日 08:17:41 +02:00
udp_no_control.go Split out dns.Session to avoid repeating 2025年09月14日 08:17:41 +02:00
udp_session.go Split out dns.Session to avoid repeating 2025年09月14日 08:17:41 +02:00
version.go Release 0.1.11 2025年09月10日 13:40:41 +02:00
zcompare.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
zcopy.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
zdnstest.go test: allow dnstest primitives also to be used 2025年09月03日 07:15:28 +02:00
zdnsutil.go Add Expired function that checks if the zonefile is almost expired 2025年09月14日 14:23:51 +02:00
zdsolen.go DSO: add some basic generators 2025年08月16日 10:45:23 +02:00
zdsorr.go Generate compare functions 2025年08月23日 09:42:16 +02:00
zednspack.go Prepartion work to parse EDNS0 RR from text 2025年09月03日 14:52:06 +02:00
zednsrr.go All EDNS0 options are o not rr in the methods 2025年09月02日 19:05:52 +02:00
zlen.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
zmsg.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
zpack.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
zparse.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00
zrr.go Remove IPSECKEY and AMTRELAY 2025年09月14日 08:09:46 +02:00

Go Report Card status-badge

Even more alternative approach to a DNS library (version 2)

Status

  • Everything from github.com/miekg/dns should work
    • ... and more.
  • Fast(er); recvmmsg and pipeling suppport.
    • Since a46996c I can get 400K qps on my laptop (M2/Asahi Linux).
    • On intel/amd it is lower (200K qps) - yet to understand why.
    • See cmd/reflect and do a go build; go test -v. Requires dnsperf to be installed.
  • More convenience functions included in dns or otherwise in dnsutils.
  • Test helper function included dnstest.
  • Example programs included and benchmarked in cmd/.

See open issues on the remaining work.

(Previous version is https://github.com/miekg/dns)

Less is more.

Complete and usable DNS library. All Resource Records are supported, including the DNSSEC types. It follows a lean and mean philosophy. Server side and client side programming is supported, i.e. you can build servers and resolvers with it.

We try to keep the "main" branch as sane as possible and at the bleeding edge of standards, avoiding breaking changes wherever reasonable. but because this version is young, we allow ourselves some more headroom.

The naming of types follows the RFCs. EDNS0 types are similarly named, for instance, DHU (Ds Hash Understood). If there is a clash between an actual RR's and an EDNS0 one, the EDNS0 type will get an 'E' as prefix, e.g. EDHU. This will also be done if the RR was named later than the EDNS0 option! The same is the for DSO (DNS Stateful Operations), when clashing those types will be prefixed with a 'D'. If EDNS0 and DSO clash, EDNS0 wins.

Goals

  • KISS.
  • Everything is an resource record.
  • Small API.
    • Package dnsutil contains functions that help programmers, but are not nessecarily in scope the the dns package.
    • Package dnstest contains functions and types that help you test, similar to the httptest package.
    • Package svcb holds all details of the SVCB/HTTPS record.
    • Many helper/debug functions are moved in internal packages.
  • Fast.
    • The cmd/reflect server does 350K/280K UDP/TCP respectively.
  • Improved naming by embracing sub-packages.

Users

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

  • sndns - my (Miek) private fork of CoreDNS.

Send pull request if you want to be listed here.

Features

  • UDP/TCP queries, recvmmsg, TCP query-pipelining, IPv4 and IPv6.
  • Fast(er).
  • RFC 1035 zone file parsing ($INCLUDE, $ORIGIN, $TTL and $GENERATE - for all record types) is supported.
  • Server side programming (mimicking the net/http package), with dns.Handle and dns.HandleFunc allowing for middleware servers.
  • Client side programming.
  • DNSSEC: signing, validating and key generation for DSA, RSA, ECDSA and Ed25519.
  • EDNS0, NSID, Cookies, etc, as pseudo RRs in the (fake) pseudo section.
  • AXFR/IXFR.
  • TSIG, SIG(0).
  • Dynamic updates.
  • DNS over TLS (DoT): encrypted connection between client and server over TCP.
  • Examples included the cmd/ directory.

Have fun!

Miek Gieben - 2025- - miek@miek.nl

Building

This library uses Go modules and uses semantic versioning. Building is done with the go tool, so the following should work:

go get codeberg.org/miekg/dns
go build codeberg.org/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 codeberg.org/miekg/dns). The cmd/ directory contains a few example programs.

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
  • 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
  • 3123 - APL record
  • 3225 - DO bit (DNSSEC OK)
  • 340{1,2,3} - NAPTR record
  • 3445 - Limiting the scope of (DNS)KEY
  • 3596 - AAAA record
  • 3597 - Unknown RRs
  • 4025 - A Method for Storing IPsec Keying Material in DNS
  • 403{3,4,5} - DNSSEC
  • 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
  • 6672 - DNAME
  • 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
  • 6944 - DNSSEC DNSKEY Algorithm Status
  • 6975 - Algorithm Understanding in DNSSEC
  • 7043 - EUI48/EUI64 records
  • 7314 - DNS (EDNS) EXPIRE Option
  • 7477 - CSYNC RR
  • 7828 - tcp-keepalive EDNS0 Option
  • 7553 - URI record
  • 7719 - DNS Terminology
  • 7858 - DNS over TLS: Initiation and Performance Considerations
  • 7871 - EDNS0 Client Subnet
  • 7873 - Domain Name System (DNS) Cookies
  • 8080 - EdDSA for DNSSEC
  • 8482 - Minimal Answers for ANY
  • 8499 - DNS Terminology
  • 8659 - DNS Certification Authority Authorization (CAA) Resource Record
  • 8777 - DNS Reverse IP Automatic Multicast Tunneling (AMT) Discovery
  • 8914 - Extended DNS Errors
  • 8976 - Message Digest for DNS Zones (ZONEMD RR)
  • 9461 - Service Binding Mapping for DNS Servers
  • 9462 - Discovery of Designated Resolvers
  • 9460 - SVCB and HTTPS Records
  • 9499 - DNS Terminology
  • 9567 - DNS Error Reporting
  • 9606 - DNS Resolver Information
  • 9660 - Zone version
  • draft-ietf-compact-denial - CO bit
  • draft-ietf-deleg - DELEG RR

Loosely Based Upon