This is a clone/fork of https://github.com/miekg/dns
1e58ea2d5f | ||
---|---|---|
ex | ||
t | ||
.gitignore | ||
LICENSE | ||
README.markdown | ||
TODO.markdown | ||
anchor.go | ||
client.go | ||
client_test.go | ||
clientconfig.go | ||
defaults.go | ||
dns.go | ||
dns_test.go | ||
dnssec.go | ||
dnssec_test.go | ||
dyn_test.go | ||
edns.go | ||
keygen.go | ||
kscan.go | ||
labels.go | ||
labels_test.go | ||
msg.go | ||
nsec3_test.go | ||
nsecx.go | ||
parse_test.go | ||
rawmsg.go | ||
scanner.go | ||
server.go | ||
server_test.go | ||
tsig.go | ||
types.go | ||
update.go | ||
xfr.go | ||
zgenerate.go | ||
zone.go | ||
zscan.go | ||
zscan_rr.go |
README.markdown
Alternative (more granular) approach to a DNS library.
Less is more.
Complete and usable DNS library. All widely used Resource Records are supported, including the DNSSEC types. It follows a lean and mean philosophy. If there is stuff you should know as a DNS programmer there isn't a convenience function for it. Server side and client side programming is supported, i.e. you can build servers and resolvers with it.
Goals
- KISS;
- Symmetric API: client and server side should be very similar;
- Small API, if its easy to code in Go, don't make a function for it.
Features
- UDP/TCP queries, IPv4 and IPv6;
- RFC 1035 zone file parsing ($INCLUDE, $ORIGIN, $TTL and $GENERATE [for all record types] are supported);
- Fast:
- Reply speed around 35/40K qps (faster hardware results in more qps);
- Parsing RRs (zone files) with 95/100K RR/s, that's 5M records in about 50 seconds;
- Client and server side programming (mimicking the net/http package);
- Asynchronous queries/replies for client and server;
- DNSSEC: signing, validating and key generation for DSA, RSA and ECDSA;
- EDNS0, NSID;
- AXFR/IXFR;
- TSIG;
- DNS name compression.
Have fun!
Miek Gieben - 2010-2012 - miek@miek.nl
Building
Building is done with the go
tool. If you have setup your GOPATH
correctly the following should work:
go build dns
Sample programs can be found in the ex
directory. They can
be build with: make -C ex
, or also with the go
tool.
Supported RFCs
all of them
- 103{4,5} - DNS standard
- 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
- 3110 - RSASHA1 DNS keys
- 3225 - DO bit (DNSSEC OK)
- 340{1,2,3} - NAPTR record
- 3445 - Limiting the scope of (DNS)KEY
- 3597 - Unkown RRs
- 403{3,4,5} - DNSSEC + validation functions
- 4255 - SSHFP record
- 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
- 6605 - ECDSA
- xxxx - URI record (draft)
Loosely based upon:
ldns
NSD
Net::DNS
GRONG