dnsexit-manager/utilities.go
2025-07-24 04:53:01 +03:00

79 lines
1.5 KiB
Go

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