mirror of
https://github.com/coredns/coredns.git
synced 2025-11-02 18:23:25 -05:00
Hook it up properly by adding it to the directives list. And add the Target to the SRV record to actually return valid DNS messages.
53 lines
1.1 KiB
Go
53 lines
1.1 KiB
Go
package whoami
|
|
|
|
import (
|
|
"net"
|
|
"strconv"
|
|
|
|
"github.com/miekg/coredns/middleware"
|
|
"github.com/miekg/coredns/request"
|
|
|
|
"github.com/miekg/dns"
|
|
"golang.org/x/net/context"
|
|
)
|
|
|
|
type Whoami struct {
|
|
Next middleware.Handler
|
|
}
|
|
|
|
func (wh Whoami) ServeDNS(ctx context.Context, w dns.ResponseWriter, r *dns.Msg) (int, error) {
|
|
state := request.Request{W: w, Req: r}
|
|
|
|
a := new(dns.Msg)
|
|
a.SetReply(r)
|
|
a.Compress = true
|
|
a.Authoritative = true
|
|
|
|
ip := state.IP()
|
|
var rr dns.RR
|
|
|
|
switch state.Family() {
|
|
case 1:
|
|
rr = new(dns.A)
|
|
rr.(*dns.A).Hdr = dns.RR_Header{Name: state.QName(), Rrtype: dns.TypeA, Class: state.QClass()}
|
|
rr.(*dns.A).A = net.ParseIP(ip).To4()
|
|
case 2:
|
|
rr = new(dns.AAAA)
|
|
rr.(*dns.AAAA).Hdr = dns.RR_Header{Name: state.QName(), Rrtype: dns.TypeAAAA, Class: state.QClass()}
|
|
rr.(*dns.AAAA).AAAA = net.ParseIP(ip)
|
|
}
|
|
|
|
srv := new(dns.SRV)
|
|
srv.Hdr = dns.RR_Header{Name: "_" + state.Proto() + "." + state.QName(), Rrtype: dns.TypeSRV, Class: state.QClass()}
|
|
port, _ := strconv.Atoi(state.Port())
|
|
srv.Port = uint16(port)
|
|
srv.Target = "."
|
|
|
|
a.Extra = []dns.RR{rr, srv}
|
|
|
|
state.SizeAndDo(a)
|
|
w.WriteMsg(a)
|
|
|
|
return 0, nil
|
|
}
|