bettercap/modules/syn_scan/dns_grabber.go
2020-12-24 17:31:40 -08:00

35 lines
797 B
Go

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 ""
}