dns/ex/key2ds/key2ds.go

44 lines
1.0 KiB
Go
Raw Normal View History

2011-03-22 19:13:25 +11:00
package main
2011-03-23 05:47:24 +11:00
// Print the DNSKEY records of a domain as DS records
2011-07-05 04:57:19 +10:00
// Twist with all the other tools that can do this. Do
// this directly from the internet.
2011-03-22 19:13:25 +11:00
// (c) Miek Gieben - 2011
import (
"fmt"
2012-08-24 20:42:41 +10:00
"github.com/miekg/dns"
"os"
2011-03-22 19:13:25 +11:00
)
func main() {
2011-07-05 04:57:19 +10:00
conf, err := dns.ClientConfigFromFile("/etc/resolv.conf")
if len(os.Args) != 2 || err != nil {
fmt.Printf("%s DOMAIN\n", os.Args[0])
os.Exit(1)
}
m := new(dns.Msg)
2012-01-09 02:49:54 +11:00
m.SetQuestion(dns.Fqdn(os.Args[1]), dns.TypeDNSKEY)
2012-05-26 18:28:55 +10:00
m.SetEdns0(2048, true)
2011-07-05 04:57:19 +10:00
c := new(dns.Client)
2012-05-26 18:28:55 +10:00
r, _ := c.Exchange(m, conf.Servers[0]+":"+conf.Port)
if r == nil {
fmt.Printf("*** no answer received for %s\n", os.Args[1])
os.Exit(1)
}
2011-07-05 04:57:19 +10:00
if r.Rcode != dns.RcodeSuccess {
fmt.Printf(" *** invalid answer name %s after DNSKEY query for %s\n", os.Args[1], os.Args[1])
os.Exit(1)
}
for _, k := range r.Answer {
if key, ok := k.(*dns.RR_DNSKEY); ok {
key.Hdr.Ttl = 0
2012-05-26 18:28:55 +10:00
for _, alg := range []int{dns.SHA1, dns.SHA256, dns.SHA384} {
ds := key.ToDS(alg)
fmt.Printf("%v; %d\n", ds, key.Flags)
}
}
}
2011-03-22 19:13:25 +11:00
}