Skip to content

Instantly share code, notes, and snippets.

@baris
Created February 27, 2015 07:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save baris/76e577d15b572fa3619f to your computer and use it in GitHub Desktop.
Save baris/76e577d15b572fa3619f to your computer and use it in GitHub Desktop.
package main
import (
"log"
"math/rand"
"time"
"github.com/miekg/dns"
)
const (
ORIGIN string = "$ORIGIN metin.org."
SOA string = "@ SOA metin.org. baris.metin.org 2015032600 1800 900 0604800 604800"
)
func main() {
start()
}
type DelayedHandler struct {
}
func NewRR(s string) dns.RR { r, _ := dns.NewRR(s); return r }
func query(r *dns.Msg) *dns.Msg {
c := new(dns.Client)
m, _, _ := c.Exchange(r, "8.8.8.8:53")
return m
}
func (h DelayedHandler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
log.Println("Handling dns query for ", r.Question)
m := query(r)
delay := 0
if r.Question[0].Qtype == dns.TypeAAAA || r.Question[0].Qtype == dns.TypeA {
delay = rand.Intn(3)
}
time.Sleep(time.Duration(delay) * time.Second)
w.WriteMsg(m)
}
func start() {
h := DelayedHandler{}
srvu := &dns.Server{Addr: ":5354", Net: "udp", Handler: h}
srvt := &dns.Server{Addr: ":5354", Net: "tcp", Handler: h}
if err := srvu.ListenAndServe(); err != nil {
log.Fatal("Failed to listen on :53", err)
}
if err := srvt.ListenAndServe(); err != nil {
log.Fatal("Failed to listen on :53", err)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment