mirror of
https://github.com/bettercap/bettercap
synced 2025-07-06 04:52:10 -07:00
Fix content type parsing error, improve regexp search performance, strip header names and values.
This commit is contained in:
parent
dd08976e8b
commit
0a0cefc5d8
2 changed files with 95 additions and 48 deletions
|
@ -94,27 +94,44 @@ func (j *JSRequest) WasModified() bool {
|
|||
func (j *JSRequest) GetHeader(name, deflt string) string {
|
||||
headers := strings.Split(j.Headers, "\r\n")
|
||||
for i := 0; i < len(headers); i++ {
|
||||
header_name := header_regexp.ReplaceAllString(headers[i], "$1")
|
||||
header_value := header_regexp.ReplaceAllString(headers[i], "$2")
|
||||
if headers[i] != "" {
|
||||
header_parts := header_regexp.FindAllSubmatch([]byte(headers[i]), 1)
|
||||
if len(header_parts) != 0 && len(header_parts[0]) == 3 {
|
||||
header_name := string(header_parts[0][1])
|
||||
header_value := string(header_parts[0][2])
|
||||
|
||||
if strings.ToLower(name) == strings.ToLower(header_name) {
|
||||
return header_value
|
||||
if strings.ToLower(name) == strings.ToLower(header_name) {
|
||||
return header_value
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return deflt
|
||||
}
|
||||
|
||||
func (j *JSRequest) SetHeader(name, value string) {
|
||||
name = strings.TrimSpace(name)
|
||||
value = strings.TrimSpace(value)
|
||||
|
||||
if strings.ToLower(name) == "content-type" {
|
||||
j.ContentType = value;
|
||||
}
|
||||
|
||||
headers := strings.Split(j.Headers, "\r\n")
|
||||
for i := 0; i < len(headers); i++ {
|
||||
header_name := header_regexp.ReplaceAllString(headers[i], "$1")
|
||||
header_value := header_regexp.ReplaceAllString(headers[i], "$2")
|
||||
if headers[i] != "" {
|
||||
header_parts := header_regexp.FindAllSubmatch([]byte(headers[i]), 1)
|
||||
if len(header_parts) != 0 && len(header_parts[0]) == 3 {
|
||||
header_name := string(header_parts[0][1])
|
||||
header_value := string(header_parts[0][2])
|
||||
|
||||
if strings.ToLower(name) == strings.ToLower(header_name) {
|
||||
old_header := header_name + ": " + header_value + "\r\n"
|
||||
new_header := header_name + ": " + value + "\r\n"
|
||||
j.Headers = strings.Replace(j.Headers, old_header, new_header, 1)
|
||||
return
|
||||
if strings.ToLower(name) == strings.ToLower(header_name) {
|
||||
old_header := header_name + ": " + header_value + "\r\n"
|
||||
new_header := name + ": " + value + "\r\n"
|
||||
j.Headers = strings.Replace(j.Headers, old_header, new_header, 1)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
j.Headers += name + ": " + value + "\r\n"
|
||||
|
@ -123,13 +140,18 @@ func (j *JSRequest) SetHeader(name, value string) {
|
|||
func (j *JSRequest) RemoveHeader(name string) {
|
||||
headers := strings.Split(j.Headers, "\r\n")
|
||||
for i := 0; i < len(headers); i++ {
|
||||
header_name := header_regexp.ReplaceAllString(headers[i], "$1")
|
||||
header_value := header_regexp.ReplaceAllString(headers[i], "$2")
|
||||
if headers[i] != "" {
|
||||
header_parts := header_regexp.FindAllSubmatch([]byte(headers[i]), 1)
|
||||
if len(header_parts) != 0 && len(header_parts[0]) == 3 {
|
||||
header_name := string(header_parts[0][1])
|
||||
header_value := string(header_parts[0][2])
|
||||
|
||||
if strings.ToLower(name) == strings.ToLower(header_name) {
|
||||
removed_header := header_name + ": " + header_value + "\r\n"
|
||||
j.Headers = strings.Replace(j.Headers, removed_header, "", 1)
|
||||
return
|
||||
if strings.ToLower(name) == strings.ToLower(header_name) {
|
||||
removed_header := header_name + ": " + header_value + "\r\n"
|
||||
j.Headers = strings.Replace(j.Headers, removed_header, "", 1)
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -179,26 +201,26 @@ func (j *JSRequest) ToRequest() (req *http.Request) {
|
|||
req, _ = http.NewRequest(j.Method, url, strings.NewReader(j.Body))
|
||||
}
|
||||
|
||||
hadType := false
|
||||
|
||||
headers := strings.Split(j.Headers, "\r\n")
|
||||
for i := 0; i < len(headers); i++ {
|
||||
if headers[i] != "" {
|
||||
header_name := header_regexp.ReplaceAllString(headers[i], "$1")
|
||||
header_value := header_regexp.ReplaceAllString(headers[i], "$2")
|
||||
header_parts := header_regexp.FindAllSubmatch([]byte(headers[i]), 1)
|
||||
if len(header_parts) != 0 && len(header_parts[0]) == 3 {
|
||||
header_name := string(header_parts[0][1])
|
||||
header_value := string(header_parts[0][2])
|
||||
|
||||
req.Header.Set(header_name, header_value)
|
||||
if strings.ToLower(header_name) == "content-type" {
|
||||
hadType = true
|
||||
if strings.ToLower(header_name) == "content-type" {
|
||||
if header_value != j.ContentType {
|
||||
req.Header.Set(header_name, j.ContentType)
|
||||
continue
|
||||
}
|
||||
}
|
||||
req.Header.Set(header_name, header_value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
req.RemoteAddr = j.Client["IP"]
|
||||
|
||||
if !hadType && j.ContentType != "" {
|
||||
req.Header.Set("Content-Type", j.ContentType)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue