Skip to content

Instantly share code, notes, and snippets.

@NickCao
Created June 28, 2019 04:23
Show Gist options
  • Save NickCao/0d3fc888d8ec3ce53ae07ee7a18ab101 to your computer and use it in GitHub Desktop.
Save NickCao/0d3fc888d8ec3ce53ae07ee7a18ab101 to your computer and use it in GitHub Desktop.
package main
import (
"github.com/miekg/dns"
"log"
"time"
)
var laddr = "127.0.0.1:5353"
var fakedns = "99.84.239.46:53"
var realdns = "8.8.8.8:53"
var safedns = "127.0.0.1:5300"
var timeout = 500*time.Millisecond
func main() {
var err error
err = dns.ListenAndServe(laddr, "udp", &maniacHandler{dns.Client{Timeout:timeout}})
if err != nil {
log.Fatal(err)
}
}
type maniacHandler struct {
client dns.Client
}
func (m *maniacHandler) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
answer, _, err := m.client.Exchange(r, fakedns)
if err == nil {
log.Print("Domain: "+r.Question[0].String()+" potentially polluted")
answer, _, err = m.client.Exchange(r, safedns)
if err != nil{
log.Print(err)
return
}
w.WriteMsg(answer)
return
}
log.Print("Domain: "+r.Question[0].String()+" is safe")
answer, _, err = m.client.Exchange(r, realdns)
if err != nil{
log.Print(err)
return
}
w.WriteMsg(answer)
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment