Skip to content

Instantly share code, notes, and snippets.

@walm
Last active September 21, 2025 16:52
Show Gist options
  • Save walm/0d67b4fb2d5daf3edd4fad3e13b162cb to your computer and use it in GitHub Desktop.
Save walm/0d67b4fb2d5daf3edd4fad3e13b162cb to your computer and use it in GitHub Desktop.

Revisions

  1. walm revised this gist Nov 18, 2016. No changes.
  2. walm revised this gist Nov 18, 2016. No changes.
  3. walm created this gist Nov 18, 2016.
    57 changes: 57 additions & 0 deletions main.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,57 @@
    package main

    import (
    "fmt"
    "log"
    "strconv"

    "github.com/miekg/dns"
    )

    var records = map[string]string{
    "test.service.": "192.168.0.2",
    }

    func parseQuery(m *dns.Msg) {
    for _, q := range m.Question {
    switch q.Qtype {
    case dns.TypeA:
    log.Printf("Query for %s\n", q.Name)
    ip := records[q.Name]
    if ip != "" {
    rr, err := dns.NewRR(fmt.Sprintf("%s A %s", q.Name, ip))
    if err == nil {
    m.Answer = append(m.Answer, rr)
    }
    }
    }
    }
    }

    func handleDnsRequest(w dns.ResponseWriter, r *dns.Msg) {
    m := new(dns.Msg)
    m.SetReply(r)
    m.Compress = false

    switch r.Opcode {
    case dns.OpcodeQuery:
    parseQuery(m)
    }

    w.WriteMsg(m)
    }

    func main() {
    // attach request handler func
    dns.HandleFunc("service.", handleDnsRequest)

    // start server
    port := 5353
    server := &dns.Server{Addr: ":" + strconv.Itoa(port), Net: "udp"}
    log.Printf("Starting at %d\n", port)
    err := server.ListenAndServe()
    defer server.Shutdown()
    if err != nil {
    log.Fatalf("Failed to start server: %s\n ", err.Error())
    }
    }
    1 change: 1 addition & 0 deletions test.sh
    Original file line number Diff line number Diff line change
    @@ -0,0 +1 @@
    dig @localhost -p 5353 test.service