63 lines
1.4 KiB
Go
Raw Normal View History

2021-02-27 12:33:27 +05:30
package main
import (
"io/ioutil"
"strconv"
"github.com/miekg/dns"
"github.com/projectdiscovery/nuclei/v2/internal/testutils"
)
var dnsTestCases = map[string]testutils.TestCase{
"dns/basic.yaml": &dnsBasic{},
}
type dnsBasic struct{}
func (h *dnsBasic) ServeDNS(w dns.ResponseWriter, r *dns.Msg) {
msg := dns.Msg{}
msg.SetReply(r)
2021-02-27 12:35:15 +05:30
if r.Question[0].Qtype == dns.TypeCNAME {
2021-02-27 12:33:27 +05:30
msg.Authoritative = true
domain := msg.Question[0].Name
if domain == "test.nuclei." {
msg.Answer = append(msg.Answer, &dns.CNAME{
Hdr: dns.RR_Header{Name: domain, Rrtype: dns.TypeCNAME, Class: dns.ClassINET, Ttl: 60},
Target: "nuclei.works.",
})
}
}
2021-02-27 12:35:15 +05:30
_ = w.WriteMsg(&msg)
2021-02-27 12:33:27 +05:30
}
// Executes executes a test case and returns an error if occurred
func (h *dnsBasic) Execute(filePath string) error {
var routerErr error
2021-02-27 12:43:14 +05:30
srv := &dns.Server{Addr: "127.0.0.1:" + strconv.Itoa(54), Net: "udp"}
2021-02-27 12:33:27 +05:30
srv.Handler = h
go func() {
if err := srv.ListenAndServe(); err != nil {
routerErr = err
return
}
}()
err := ioutil.WriteFile("resolvers.txt", []byte("127.0.0.1:54"), 0777)
if err != nil {
return err
}
results, err := testutils.RunNucleiAndGetResults(filePath, "test.nuclei", debug, "-r", "resolvers.txt")
if err != nil {
return err
}
if routerErr != nil {
return routerErr
}
if len(results) != 1 {
return errIncorrectResultsCount(results)
}
return nil
}