package syn_scan

import (
	"fmt"
	"regexp"

	"github.com/miekg/dns"
)

var chaosParser = regexp.MustCompile(`.*"([^"]+)".*`)

func grabChaos(addr string, q string) string {
	c := new(dns.Client)
	m := new(dns.Msg)
	m.Question = make([]dns.Question, 1)
	m.Question[0] = dns.Question{Name: q, Qtype: dns.TypeTXT, Qclass: dns.ClassCHAOS}
	if in, _, _ := c.Exchange(m, addr); in != nil && len(in.Answer) > 0 {
		s := in.Answer[0].String()
		if match := chaosParser.FindStringSubmatch(s); len(match) > 0 {
			return match[1]
		}
	}
	return ""
}

func dnsGrabber(mod *SynScanner, ip string, port int) string {
	addr := fmt.Sprintf("%s:%d", ip, port)
	if v := grabChaos(addr, "version.bind."); v != "" {
		return v
	} else if v := grabChaos(addr, "hostname.bind."); v != "" {
		return v
	}
	return ""
}