-
Notifications
You must be signed in to change notification settings - Fork 0
/
SpyResolverCache.go
103 lines (60 loc) · 1.94 KB
/
SpyResolverCache.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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package test
import "tholian-endpoint/protocols/dns"
type SpyResolverCache struct {
ResponseExists bool `json:"response_exists"`
ResponseRead *dns.Packet `json:"response_read"`
ResponseWrite bool `json:"response_write"`
ResolvedExists string `json:"resolved_exists"`
ResolvedRead string `json:"resolved_read"`
ResolvedWrite string `json:"resolved_write"`
}
func NewSpyResolverCache(response_exists bool, response_read *dns.Packet, response_write bool) SpyResolverCache {
var cache SpyResolverCache
cache.ResponseExists = response_exists
cache.ResponseRead = response_read
cache.ResponseWrite = response_write
return cache
}
func (cache *SpyResolverCache) Exists(query dns.Packet) bool {
if query.Type == "query" && len(query.Questions) > 0 {
resolved := ""
for q := 0; q < len(query.Questions); q++ {
resolved += query.Questions[q].Type.String() + ":" + query.Questions[q].Name
if q < len(query.Questions) - 1 {
resolved += ","
}
}
cache.ResolvedExists = resolved
}
return cache.ResponseExists
}
func (cache *SpyResolverCache) Read(query dns.Packet) dns.Packet {
var response dns.Packet
if query.Type == "query" && len(query.Questions) > 0 {
resolved := ""
for q := 0; q < len(query.Questions); q++ {
resolved += query.Questions[q].Type.String() + ":" + query.Questions[q].Name
if q < len(query.Questions) - 1 {
resolved += ","
}
}
cache.ResolvedRead = resolved
if cache.ResponseRead != nil {
response = *cache.ResponseRead
}
}
return response
}
func (cache *SpyResolverCache) Write(query dns.Packet) bool {
if query.Type == "query" && len(query.Questions) > 0 {
resolved := ""
for q := 0; q < len(query.Questions); q++ {
resolved += query.Questions[q].Type.String() + ":" + query.Questions[q].Name
if q < len(query.Questions) - 1 {
resolved += ","
}
}
cache.ResolvedWrite = resolved
}
return cache.ResponseWrite
}