dns/_examples/axfr/axfr.go
Miek Gieben 9bc0ca4618 Fix AXFR and IXFR
Defined a new type Xfr which holds all the info for AXFR and
IXFR. Works well. Xfr.Add tells to add or remove (in case of AXFR
alwasy true). And further more holds the RR
2011-02-26 17:39:18 +01:00

40 lines
1.1 KiB
Go

package main
import (
"fmt"
"dns"
"flag"
)
func main() {
var serial *int = flag.Int("serial", 0, "Perform an IXFR with the given serial")
var nameserver *string = flag.String("ns", "127.0.0.1", "Query this nameserver")
flag.Parse()
zone := flag.Arg(flag.NArg()-1)
res := new(dns.Resolver)
res.FromFile("/etc/resolv.conf")
res.Servers[0] = *nameserver
c := make(chan dns.Xfr)
m := new(dns.Msg)
m.Question = make([]dns.Question, 1)
if *serial > 0 {
m.Question[0] = dns.Question{zone, dns.TypeIXFR, dns.ClassINET}
soa := new(dns.RR_SOA)
soa.Hdr = dns.RR_Header{zone, dns.TypeSOA, dns.ClassINET, 14400, 0}
soa.Serial = uint32(*serial)
m.Ns = make([]dns.RR, 1)
m.Ns[0] = soa
go res.Ixfr(m, c)
} else {
m.Question[0] = dns.Question{zone, dns.TypeAXFR, dns.ClassINET}
go res.Axfr(m, c)
}
for x := range c {
fmt.Printf("%v %v\n",x.Add, x.RR)
}
}