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 }