DNS reflector server in GO
I’m (again) rewriting the API of godns. I’ve now taking a cue from the http package in Go, the result seems very nice. A reflector (returns your query in the answer) in Go becomes:
package main
import (
"dns"
"log"
)
func ReflectServer(w dns.ResponseWriter, req *dns.Msg) {
m := new(dns.Msg)
m.SetReply(req)
m.Extra = make([]dns.RR, 1)
m.Extra[0] = &dns.RR_TXT{Hdr: dns.RR_Header{Name: m.Question[0].Name, Rrtype: dns.TypeTXT,
Class: dns.ClassINET, Ttl: 0}, Txt: "Hello world"}
buf, _ := m.Pack()
w.Write(buf)
}
func main() {
dns.HandleFunc(".", ReflectServer)
err := dns.ListenAndServe(":8053", "udp", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err.String())
}
}
Read other posts