From 93c0500dced6680bd84f11e504bbdfd4e5561ded Mon Sep 17 00:00:00 2001 From: Miek Gieben Date: Sat, 22 Jun 2013 20:40:01 +0100 Subject: [PATCH] Add as212 thingy server as example --- ex/as212/as212.go | 76 ++++++++++++++++++++++++++++++++++------------- 1 file changed, 55 insertions(+), 21 deletions(-) diff --git a/ex/as212/as212.go b/ex/as212/as212.go index be238a63..39fabf60 100644 --- a/ex/as212/as212.go +++ b/ex/as212/as212.go @@ -9,30 +9,34 @@ package main import ( "github.com/miekg/dns" + "log" + "os" + "os/signal" + "syscall" ) const SOA string = "@ SOA prisoner.iana.org. hostmaster.root-servers.org. 2002040800 1800 900 0604800 604800" var zones = map[string]dns.RR{ - "10.in-addr.arpa": NewRR("$ORIGIN 10.in-addr.arpa.\n" + SOA), - "254.169.in-addr.arpa": NewRR("$ORIGIN 254.169.in-addr.arpa.\n" + SOA), - "168.192.in-addr.arpa": NewRR("$ORIGIN 168.192.in-addr.arpa.\n" + SOA), - "16.172.in-addr.arpa": NewRR("$ORIGIN 16.172.in-addr.arpa.\n" + SOA), - "17.172.in-addr.arpa": NewRR("$ORIGIN 17.172.in-addr.arpa.\n" + SOA), - "18.172.in-addr.arpa": NewRR("$ORIGIN 18.172.in-addr.arpa.\n" + SOA), - "19.172.in-addr.arpa": NewRR("$ORIGIN 19.172.in-addr.arpa.\n" + SOA), - "20.172.in-addr.arpa": NewRR("$ORIGIN 20.172.in-addr.arpa.\n" + SOA), - "21.172.in-addr.arpa": NewRR("$ORIGIN 21.172.in-addr.arpa.\n" + SOA), - "22.172.in-addr.arpa": NewRR("$ORIGIN 22.172.in-addr.arpa.\n" + SOA), - "23.172.in-addr.arpa": NewRR("$ORIGIN 23.172.in-addr.arpa.\n" + SOA), - "24.172.in-addr.arpa": NewRR("$ORIGIN 24.172.in-addr.arpa.\n" + SOA), - "25.172.in-addr.arpa": NewRR("$ORIGIN 25.172.in-addr.arpa.\n" + SOA), - "26.172.in-addr.arpa": NewRR("$ORIGIN 26.172.in-addr.arpa.\n" + SOA), - "27.172.in-addr.arpa": NewRR("$ORIGIN 27.172.in-addr.arpa.\n" + SOA), - "28.172.in-addr.arpa": NewRR("$ORIGIN 28.172.in-addr.arpa.\n" + SOA), - "29.172.in-addr.arpa": NewRR("$ORIGIN 29.172.in-addr.arpa.\n" + SOA), - "30.172.in-addr.arpa": NewRR("$ORIGIN 30.172.in-addr.arpa.\n" + SOA), - "31.172.in-addr.arpa": NewRR("$ORIGIN 31.172.in-addr.arpa.\n" + SOA), + "10.in-addr.arpa.": NewRR("$ORIGIN 10.in-addr.arpa.\n" + SOA), + "254.169.in-addr.arpa.": NewRR("$ORIGIN 254.169.in-addr.arpa.\n" + SOA), + "168.192.in-addr.arpa.": NewRR("$ORIGIN 168.192.in-addr.arpa.\n" + SOA), + "16.172.in-addr.arpa.": NewRR("$ORIGIN 16.172.in-addr.arpa.\n" + SOA), + "17.172.in-addr.arpa.": NewRR("$ORIGIN 17.172.in-addr.arpa.\n" + SOA), + "18.172.in-addr.arpa.": NewRR("$ORIGIN 18.172.in-addr.arpa.\n" + SOA), + "19.172.in-addr.arpa.": NewRR("$ORIGIN 19.172.in-addr.arpa.\n" + SOA), + "20.172.in-addr.arpa.": NewRR("$ORIGIN 20.172.in-addr.arpa.\n" + SOA), + "21.172.in-addr.arpa.": NewRR("$ORIGIN 21.172.in-addr.arpa.\n" + SOA), + "22.172.in-addr.arpa.": NewRR("$ORIGIN 22.172.in-addr.arpa.\n" + SOA), + "23.172.in-addr.arpa.": NewRR("$ORIGIN 23.172.in-addr.arpa.\n" + SOA), + "24.172.in-addr.arpa.": NewRR("$ORIGIN 24.172.in-addr.arpa.\n" + SOA), + "25.172.in-addr.arpa.": NewRR("$ORIGIN 25.172.in-addr.arpa.\n" + SOA), + "26.172.in-addr.arpa.": NewRR("$ORIGIN 26.172.in-addr.arpa.\n" + SOA), + "27.172.in-addr.arpa.": NewRR("$ORIGIN 27.172.in-addr.arpa.\n" + SOA), + "28.172.in-addr.arpa.": NewRR("$ORIGIN 28.172.in-addr.arpa.\n" + SOA), + "29.172.in-addr.arpa.": NewRR("$ORIGIN 29.172.in-addr.arpa.\n" + SOA), + "30.172.in-addr.arpa.": NewRR("$ORIGIN 30.172.in-addr.arpa.\n" + SOA), + "31.172.in-addr.arpa.": NewRR("$ORIGIN 31.172.in-addr.arpa.\n" + SOA), } func NewRR(s string) dns.RR { @@ -40,5 +44,35 @@ func NewRR(s string) dns.RR { return r } -func as212Handler(w dns.ResponseWriter, r *dns.Msg) {} -func main() {} +func main() { + go func() { + err := dns.ListenAndServe(":8053", "tcp", nil) + if err != nil { + log.Fatal("Failed to set tcp listener %s\n", err.Error()) + } + }() + go func() { + err := dns.ListenAndServe(":8053", "udp", nil) + if err != nil { + log.Fatal("Failed to set tcp listener %s\n", err.Error()) + } + }() + for z, rr := range zones { + dns.HandleFunc(z, func(w dns.ResponseWriter, r *dns.Msg) { + m := new(dns.Msg) + m.SetReply(r) + m.Authoritative = true + m.Ns = []dns.RR{rr} + w.WriteMsg(m) + }) + } + sig := make(chan os.Signal) + signal.Notify(sig, syscall.SIGINT, syscall.SIGTERM) + + for { + select { + case s := <-sig: + log.Fatalf("Signal (%d) received, stopping\n", s) + } + } +}