forked from TsundereChen/geodns-go
/
query.go
42 lines (37 loc) · 904 Bytes
/
query.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package query
import (
"net"
"strings"
"github.com/Ne00n/geodns-go/pkg/config"
"github.com/Ne00n/geodns-go/pkg/handler"
"github.com/miekg/dns"
)
func RegisterDomain() {
var domainList = config.FetchDomain(config.ConfigMap)
for i := range domainList {
if domainList[i] != "regions" {
dns.HandleFunc(domainList[i], HandleFunction)
}
}
}
func HandleFunction(w dns.ResponseWriter, r *dns.Msg) {
var (
v4 bool
sourceAddress net.IP
)
m := new(dns.Msg)
m.SetReply(r)
m.Authoritative = true
if ip, ok := w.RemoteAddr().(*net.UDPAddr); ok {
sourceAddress = ip.IP
v4 = sourceAddress.To4() != nil
}
if ip, ok := w.RemoteAddr().(*net.TCPAddr); ok {
sourceAddress = ip.IP
v4 = sourceAddress.To4() != nil
}
fqdn := strings.ToLower(m.Question[0].Name)
rr := handler.DNSHandler(fqdn, r.Question[0].Qtype, sourceAddress, v4)
m.Answer = []dns.RR{rr}
w.WriteMsg(m)
}