-
Notifications
You must be signed in to change notification settings - Fork 14
/
overrides.go
77 lines (69 loc) · 1.65 KB
/
overrides.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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
package dnsx
import (
"net/netip"
"strings"
"github.com/celzero/firestack/intra/log"
"github.com/celzero/firestack/intra/settings"
)
func (h *resolver) isDnsIpPort(addr netip.AddrPort) bool {
for _, dnsaddr := range h.dnsaddrs {
if addr.Compare(dnsaddr) == 0 {
return true
}
}
return false
}
func (h *resolver) isDnsPort(addr netip.AddrPort) bool {
// isn't h.fakedns.Port always expected to be 53?
for _, dnsaddr := range h.dnsaddrs {
if addr.Port() == dnsaddr.Port() {
return true
}
}
return false
}
func (h *resolver) isDns(ipport string) bool {
if ipp, err := netip.ParseAddrPort(ipport); err != nil {
return false
} else {
if !ipp.IsValid() || len(h.dnsaddrs) <= 0 {
log.E("dnsx: missing dst-addr(%v) or dns(%v)", ipp, h.dnsaddrs)
return false
}
if h.trapIP() {
if yes := h.isDnsIpPort(ipp); yes {
return true
}
} else if h.trapPort() {
if yes := h.isDnsPort(ipp); yes {
return true
}
}
return false
}
}
func (h *resolver) trapIP() bool {
return h.tunmode.DNSMode == settings.DNSModeIP
}
func (h *resolver) trapPort() bool {
return h.tunmode.DNSMode == settings.DNSModePort
}
func (r *resolver) addDnsAddrs(csvaddr string) {
addrs := strings.Split(csvaddr, ",")
dnsaddrs := make([]netip.AddrPort, 0)
if len(addrs) <= 0 {
log.E("dnsx: missing dnsaddrs(%s)", csvaddr)
return
}
for _, a := range addrs {
if ipp, err := netip.ParseAddrPort(a); ipp.IsValid() && err == nil {
dnsaddrs = append(dnsaddrs, ipp)
} else {
log.W("dnsx: not valid fake udpaddr(%s <=> %s): %v", ipp, a, err)
}
}
if len(dnsaddrs) <= 0 {
log.E("dnsx: no valid dnsaddrs(%s)", csvaddr)
}
r.dnsaddrs = dnsaddrs
}