Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
alpkeskin
GitHub Repository: alpkeskin/mosint
Path: blob/master/v3/pkg/dns/dns.go
689 views
1
/*
2
Copyright © 2023 github.com/alpkeskin
3
*/
4
package dns
5
6
import (
7
"fmt"
8
"strings"
9
10
"github.com/alpkeskin/mosint/v3/internal/spinner"
11
"github.com/domainr/dnsr"
12
"github.com/fatih/color"
13
)
14
15
type Dns struct {
16
Records []Record
17
}
18
19
type Record struct {
20
Type string
21
Value string
22
}
23
24
func New() *Dns {
25
return &Dns{}
26
}
27
28
func (d *Dns) Resolver(email string) {
29
spinner := spinner.New("DNS Lookup")
30
spinner.Start()
31
defer spinner.Stop()
32
33
domain := email[strings.IndexByte(email, '@')+1:]
34
r := dnsr.NewResolver(dnsr.WithCache(10000))
35
arr, err := r.ResolveErr(domain, "TXT")
36
37
if err != nil {
38
spinner.StopFail()
39
spinner.SetMessage(err.Error())
40
return
41
}
42
43
for _, rr := range arr {
44
d.Records = append(d.Records, Record{
45
Type: rr.Type,
46
Value: rr.Value,
47
})
48
}
49
50
arr, err = r.ResolveErr(domain, "MX")
51
52
if err != nil {
53
spinner.StopFail()
54
spinner.SetMessage(err.Error())
55
return
56
}
57
58
for _, rr := range arr {
59
d.Records = append(d.Records, Record{
60
Type: rr.Type,
61
Value: rr.Value,
62
})
63
}
64
65
arr, err = r.ResolveErr(domain, "A")
66
67
if err != nil {
68
spinner.StopFail()
69
spinner.SetMessage(err.Error())
70
return
71
}
72
73
for _, rr := range arr {
74
d.Records = append(d.Records, Record{
75
Type: rr.Type,
76
Value: rr.Value,
77
})
78
}
79
80
arr, err = r.ResolveErr(domain, "CNAME")
81
82
if err != nil {
83
spinner.StopFail()
84
spinner.SetMessage(err.Error())
85
return
86
}
87
88
for _, rr := range r.Resolve(domain, "CNAME") {
89
d.Records = append(d.Records, Record{
90
Type: rr.Type,
91
Value: rr.Value,
92
})
93
}
94
95
// remove duplicates
96
for i := 0; i < len(d.Records); i++ {
97
for j := i + 1; j < len(d.Records); j++ {
98
if d.Records[i].Type == d.Records[j].Type && d.Records[i].Value == d.Records[j].Value {
99
d.Records = append(d.Records[:j], d.Records[j+1:]...)
100
j--
101
}
102
}
103
}
104
}
105
106
func (d *Dns) Print() {
107
fmt.Println("[*] DNS Lookup")
108
for _, record := range d.Records {
109
fmt.Println(color.GreenString("[+]"), record.Type, record.Value)
110
}
111
}
112
113