mirror of
https://github.com/projectdiscovery/nuclei.git
synced 2025-12-28 20:26:17 +00:00
86 lines
1.8 KiB
Go
86 lines
1.8 KiB
Go
package matchers
|
|
|
|
import (
|
|
"fmt"
|
|
"net/http"
|
|
"net/http/httputil"
|
|
"strings"
|
|
"time"
|
|
|
|
"github.com/miekg/dns"
|
|
)
|
|
|
|
const defaultFormat = "%s"
|
|
|
|
// HTTPToMap Converts HTTP to Matcher Map
|
|
func HTTPToMap(resp *http.Response, body, headers string, duration time.Duration, format string) (m map[string]interface{}) {
|
|
m = make(map[string]interface{})
|
|
|
|
if format == "" {
|
|
format = defaultFormat
|
|
}
|
|
|
|
m[fmt.Sprintf(format, "content_length")] = resp.ContentLength
|
|
m[fmt.Sprintf(format, "status_code")] = resp.StatusCode
|
|
|
|
for k, v := range resp.Header {
|
|
k = strings.ToLower(strings.TrimSpace(strings.ReplaceAll(k, "-", "_")))
|
|
m[fmt.Sprintf(format, k)] = strings.Join(v, " ")
|
|
}
|
|
|
|
m[fmt.Sprintf(format, "all_headers")] = headers
|
|
m[fmt.Sprintf(format, "body")] = body
|
|
|
|
if r, err := httputil.DumpResponse(resp, true); err == nil {
|
|
m[fmt.Sprintf(format, "raw")] = string(r)
|
|
}
|
|
|
|
// Converts duration to seconds (floating point) for DSL syntax
|
|
m[fmt.Sprintf(format, "duration")] = duration.Seconds()
|
|
|
|
return m
|
|
}
|
|
|
|
// DNSToMap Converts DNS to Matcher Map
|
|
func DNSToMap(msg *dns.Msg, format string) (m map[string]interface{}) {
|
|
m = make(map[string]interface{})
|
|
|
|
if format == "" {
|
|
format = defaultFormat
|
|
}
|
|
|
|
m[fmt.Sprintf(format, "rcode")] = msg.Rcode
|
|
|
|
var qs string
|
|
|
|
for _, question := range msg.Question {
|
|
qs += fmt.Sprintln(question.String())
|
|
}
|
|
|
|
m[fmt.Sprintf(format, "question")] = qs
|
|
|
|
var exs string
|
|
for _, extra := range msg.Extra {
|
|
exs += fmt.Sprintln(extra.String())
|
|
}
|
|
|
|
m[fmt.Sprintf(format, "extra")] = exs
|
|
|
|
var ans string
|
|
for _, answer := range msg.Answer {
|
|
ans += fmt.Sprintln(answer.String())
|
|
}
|
|
|
|
m[fmt.Sprintf(format, "answer")] = ans
|
|
|
|
var nss string
|
|
for _, ns := range msg.Ns {
|
|
nss += fmt.Sprintln(ns.String())
|
|
}
|
|
|
|
m[fmt.Sprintf(format, "ns")] = nss
|
|
m[fmt.Sprintf(format, "raw")] = msg.String()
|
|
|
|
return m
|
|
}
|