github.com/chainreactors/fingers@v1.2.1/wappalyzer/fingerprint_headers.go (about) 1 package wappalyzer 2 3 import ( 4 "github.com/chainreactors/fingers/common" 5 "strings" 6 ) 7 8 // checkHeaders checks if the headers for a target match the fingerprints 9 // and returns the matched IDs if any. 10 func (engine *Wappalyze) checkHeaders(headers map[string]string) common.Frameworks { 11 technologies := engine.fingerprints.matchMapString(headers, headersPart) 12 return technologies 13 } 14 15 // normalizeHeaders normalizes the headers for the tech discovery on headers 16 func (engine *Wappalyze) normalizeHeaders(headers map[string][]string) map[string]string { 17 normalized := make(map[string]string, len(headers)) 18 data := getHeadersMap(headers) 19 20 for header, value := range data { 21 normalized[strings.ToLower(header)] = strings.ToLower(value) 22 } 23 return normalized 24 } 25 26 // GetHeadersMap returns a map[string]string of response headers 27 func getHeadersMap(headersArray map[string][]string) map[string]string { 28 headers := make(map[string]string, len(headersArray)) 29 30 builder := &strings.Builder{} 31 for key, value := range headersArray { 32 for i, v := range value { 33 builder.WriteString(v) 34 if i != len(value)-1 { 35 builder.WriteString(", ") 36 } 37 } 38 headerValue := builder.String() 39 40 headers[key] = headerValue 41 builder.Reset() 42 } 43 return headers 44 }