-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSpyResolver.go
More file actions
114 lines (66 loc) · 1.8 KB
/
Copy pathSpyResolver.go
File metadata and controls
114 lines (66 loc) · 1.8 KB
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
103
104
105
106
107
108
109
110
111
112
113
114
package test
import "tholian-endpoint/protocols/dns"
import "tholian-endpoint/types"
import "slices"
import "strings"
type SpyResolver struct {
Resolved string `json:"resolved"`
WasResolved bool `json:"was_resolved"`
isOnline bool
}
func NewSpyResolver(isOnline bool) SpyResolver {
var resolver SpyResolver
resolver.isOnline = isOnline
return resolver
}
func (resolver *SpyResolver) Resolve(subject string) dns.Packet {
var response dns.Packet
resolved := ""
if types.IsIPv4(subject) {
ipv4 := types.ParseIPv4(subject)
if ipv4 != nil {
tmp := strings.Split(ipv4.String(), ".")
slices.Reverse(tmp)
resolved = "PTR:" + strings.Join(tmp, ".") + ".in-addr.arpa"
}
} else if types.IsIPv6(subject) {
ipv6 := types.ParseIPv6(subject)
if ipv6 != nil {
tmp := strings.Split(strings.Join(strings.Split(ipv6.String(), ":"), ""), "")
slices.Reverse(tmp)
resolved = "PTR:" + strings.Join(tmp, ".") + "ip6.arpa"
}
} else if types.IsDomain(subject) {
resolved = "A:" + subject + ",AAAA:" + subject
}
if resolver.isOnline == true {
tmp, err := dns.Resolve(subject)
if err == nil {
response = tmp
}
}
resolver.Resolved = resolved
resolver.WasResolved = true
return response
}
func (resolver *SpyResolver) ResolvePacket(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 += ","
}
}
if resolver.isOnline == true {
tmp, err := dns.ResolvePacket(query)
if err == nil {
response = tmp
}
}
resolver.WasResolved = true
resolver.Resolved = resolved
}
return response
}