1
0
Fork
You've already forked dns
0
forked from miekg/dns
Go DNS library
  • Go 100%
2025年09月05日 20:34:16 +02:00
.woodpecker pull tip 2025年08月27日 13:16:22 +02:00
cmd more 2025年09月05日 20:28:46 +02:00
deleg docs 2025年09月02日 17:52:47 +02:00
dnsconf docs 2025年09月01日 14:43:59 +02:00
dnstest Fix copyright 2025年09月04日 13:49:40 +02:00
dnsutil Add the last helper functions from coredns 2025年09月04日 07:26:49 +02:00
internal Remove APL record 2025年09月05日 13:54:25 +02:00
svcb small tweak 2025年09月05日 14:01:11 +02:00
testdata More testing and toying with opt 2025年08月11日 09:24:52 +02:00
bench_test.go Fix broken things after moving UnpackName to unpack.Name 2025年08月30日 14:11:28 +02:00
ci_test.go Various cleanups 2025年09月01日 15:05:29 +02:00
client.go Pull signing out of client 2025年09月02日 16:12:55 +02:00
compare_generate.go Remove APL record 2025年09月05日 13:54:25 +02:00
CONTRIBUTORS First code dump 2025年08月06日 08:11:49 +02:00
copy_generate.go Make Copier part of the RR interface 2025年09月05日 13:57:52 +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
dns.go Make Copier part of the RR interface 2025年09月05日 13:57:52 +02:00
dnssec.go Pull signing out of client 2025年09月02日 16:12:55 +02:00
dnssec_keygen.go More msg_helpers.go to internal/{un,}pack 2025年09月01日 20:22:45 +02:00
dnssec_keyscan.go More msg_helpers.go to internal/{un,}pack 2025年09月01日 20:22:45 +02:00
dnssec_privkey.go More msg_helpers.go to internal/{un,}pack 2025年09月01日 20:22:45 +02:00
dnssec_signer.go dnssec: allow for custom sync.Pooler use 2025年09月02日 08:37:54 +02:00
dnssec_test.go test: allow dnstest primitives also to be used 2025年09月03日 07:15:28 +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 testserv: make a handler that inject a client cookie 2025年09月04日 07:13:01 +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 ResponseWriter can't return private structs 2025年09月02日 21:25:10 +02:00
generate.go ResponseWriter can't return private structs 2025年09月02日 21:25:10 +02:00
go.mod CI lags 2025年08月25日 21:23:46 +02:00
go.sum more 2025年08月25日 20:29:12 +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
ipsecpack.go juiste naam 2025年09月03日 09:34:32 +02:00
len_generate.go Remove APL record 2025年09月05日 13:54:25 +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 clean udp socket stuff 2025年09月01日 14:59:36 +02:00
Makefile.release Release 0.0.2 2025年08月18日 15:00:46 +02:00
msg.go ResponseWriter can't return private structs 2025年09月02日 21:25:10 +02:00
msg_generate.go Remove APL record 2025年09月05日 13:54:25 +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 Split off msg_helpers into pack*.go files, just like packsvcb and packdeleg. 2025年09月03日 07:31:23 +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 dnssec: allow for custom sync.Pooler use 2025年09月02日 08:37:54 +02:00
README-dev.md wip tests 2025年09月03日 19:42:38 +02:00
README-diff-with-v1.md Remove APL record 2025年09月05日 13:54:25 +02:00
README.md Perf work on intel 2025年09月05日 10:14:36 +02:00
response.go ResponseWriter can't return private structs 2025年09月02日 21:25:10 +02:00
reverse.go Prepartion work to parse EDNS0 RR from text 2025年09月03日 14:52:06 +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 Remove APL record 2025年09月05日 13:54:25 +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 ResponseWriter can't return private structs 2025年09月02日 21:25:10 +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 CompareName docs 2025年08月30日 15:38:07 +02:00
sort_test.go Implement name sort 2025年08月30日 12:51:48 +02:00
string.go Fix broken things after moving UnpackName to unpack.Name 2025年08月30日 14:11:28 +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 small tweak 2025年09月05日 14:01:11 +02:00
udp.go ResponseWriter can't return private structs 2025年09月02日 21:25:10 +02:00
udp_no_control.go ResponseWriter can't return private structs 2025年09月02日 21:25:10 +02:00
version.go Release 0.1.9 2025年09月03日 21:16:04 +02:00
zcompare.go Remove APL record 2025年09月05日 13:54:25 +02:00
zcopy.go Make Copier part of the RR interface 2025年09月05日 13:57:52 +02:00
zdnstest.go test: allow dnstest primitives also to be used 2025年09月03日 07:15:28 +02:00
zdnsutil.go test: allow dnstest primitives also to be used 2025年09月03日 07:15:28 +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 APL record 2025年09月05日 13:54:25 +02:00
zmsg.go Remove APL record 2025年09月05日 13:54:25 +02:00
zpack.go Remove APL record 2025年09月05日 13:54:25 +02:00
zparse.go Remove APL record 2025年09月05日 13:54:25 +02:00
zrr.go Remove APL record 2025年09月05日 13:54:25 +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
  • 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
  • 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