Add utilities.go

Total rework of dnsexit-manager
This commit is contained in:
2025-01-14 21:56:51 +03:00
parent 35b0d7317a
commit 7affff675d

78
utilities.go Normal file
View File

@ -0,0 +1,78 @@
package dnsexit_manager
import (
"errors"
"net"
"strconv"
"strings"
dns "git.uoc.run.place/OxFF/dns-manager"
dns_req "github.com/miekg/dns"
)
func (c *client) getNSRecods() (error, *[]string) {
var nameservers []string
ns, err := net.LookupNS(c.Domain)
if err != nil {
return err, nil
}
for _, v := range ns {
nameservers = append(nameservers, v.Host[:len(v.Host)-1]+":53")
}
return nil, &nameservers
}
func parse_record(record dns_req.RR) (error, *dns.Record) {
splitted := strings.SplitN(record.String(), "\t", -1)
if len(splitted) == 5 {
var parsed dns.Record
rec_type := dns.RecordType(splitted[3])
if !rec_type.Check() {
return errors.New("provided DNS type is not exist in the main library"), nil
}
parsed.Type = rec_type
ttl, _ := strconv.ParseUint(splitted[1], 10, 64)
parsed.Name = splitted[0]
parsed.Content = splitted[4]
parsed.TTL = uint(ttl)
return nil, &parsed
}
return errors.New("no meaningful record provided"), nil
}
func find_dns_records(domain string, nameserver string) (error, []*dns.Record) {
var subdomains []*dns.Record
tr := new(dns_req.Transfer)
m := new(dns_req.Msg)
m.SetAxfr(domain + ".")
client, err := tr.In(m, nameserver)
if err != nil {
return errors.New("failed to zone transfer in " + err.Error()), nil
}
for msg := range client {
if msg.Error != nil {
return msg.Error, nil
}
for _, r := range msg.RR {
err, record := parse_record(r)
if err == nil {
subdomains = append(subdomains, record)
}
}
}
return nil, subdomains
}