mirror of
https://github.com/bettercap/bettercap
synced 2025-07-06 04:52:10 -07:00
Merge pull request #1176 from bettercap/reduce_overhead
Reduce overhead for proxied HTTP/DNS packets
This commit is contained in:
commit
fc02767e72
5 changed files with 48 additions and 12 deletions
|
@ -355,3 +355,11 @@ func (j *JSQuery) WasModified() bool {
|
||||||
// check if any of the fields has been changed
|
// check if any of the fields has been changed
|
||||||
return j.NewHash() != j.refHash
|
return j.NewHash() != j.refHash
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (j *JSQuery) CheckIfModifiedAndUpdateHash() bool {
|
||||||
|
// check if query was changed and update its hash
|
||||||
|
newHash := j.NewHash()
|
||||||
|
wasModified := j.refHash != newHash
|
||||||
|
j.refHash = newHash
|
||||||
|
return wasModified
|
||||||
|
}
|
||||||
|
|
|
@ -84,11 +84,9 @@ func (s *DnsProxyScript) OnRequest(req *dns.Msg, clientIP string) (jsreq, jsres
|
||||||
if _, err := s.Call("onRequest", jsreq, jsres); err != nil {
|
if _, err := s.Call("onRequest", jsreq, jsres); err != nil {
|
||||||
log.Error("%s", err)
|
log.Error("%s", err)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
} else if jsreq.WasModified() {
|
} else if jsreq.CheckIfModifiedAndUpdateHash() {
|
||||||
jsreq.UpdateHash()
|
|
||||||
return jsreq, nil
|
return jsreq, nil
|
||||||
} else if jsres.WasModified() {
|
} else if jsres.CheckIfModifiedAndUpdateHash() {
|
||||||
jsres.UpdateHash()
|
|
||||||
return nil, jsres
|
return nil, jsres
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,8 +102,7 @@ func (s *DnsProxyScript) OnResponse(req, res *dns.Msg, clientIP string) (jsreq,
|
||||||
if _, err := s.Call("onResponse", jsreq, jsres); err != nil {
|
if _, err := s.Call("onResponse", jsreq, jsres); err != nil {
|
||||||
log.Error("%s", err)
|
log.Error("%s", err)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
} else if jsres.WasModified() {
|
} else if jsres.CheckIfModifiedAndUpdateHash() {
|
||||||
jsres.UpdateHash()
|
|
||||||
return nil, jsres
|
return nil, jsres
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -103,6 +103,19 @@ func (j *JSRequest) WasModified() bool {
|
||||||
return j.NewHash() != j.refHash
|
return j.NewHash() != j.refHash
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (j *JSRequest) CheckIfModifiedAndUpdateHash() bool {
|
||||||
|
newHash := j.NewHash()
|
||||||
|
// body was read
|
||||||
|
if j.bodyRead {
|
||||||
|
j.refHash = newHash
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// check if req was changed and update its hash
|
||||||
|
wasModified := j.refHash != newHash
|
||||||
|
j.refHash = newHash
|
||||||
|
return wasModified
|
||||||
|
}
|
||||||
|
|
||||||
func (j *JSRequest) GetHeader(name, deflt string) string {
|
func (j *JSRequest) GetHeader(name, deflt string) string {
|
||||||
headers := strings.Split(j.Headers, "\r\n")
|
headers := strings.Split(j.Headers, "\r\n")
|
||||||
for i := 0; i < len(headers); i++ {
|
for i := 0; i < len(headers); i++ {
|
||||||
|
|
|
@ -76,6 +76,27 @@ func (j *JSResponse) WasModified() bool {
|
||||||
return j.NewHash() != j.refHash
|
return j.NewHash() != j.refHash
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (j *JSResponse) CheckIfModifiedAndUpdateHash() bool {
|
||||||
|
newHash := j.NewHash()
|
||||||
|
if j.bodyRead {
|
||||||
|
// body was read
|
||||||
|
j.refHash = newHash
|
||||||
|
return true
|
||||||
|
} else if j.bodyClear {
|
||||||
|
// body was cleared manually
|
||||||
|
j.refHash = newHash
|
||||||
|
return true
|
||||||
|
} else if j.Body != "" {
|
||||||
|
// body was not read but just set
|
||||||
|
j.refHash = newHash
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
// check if res was changed and update its hash
|
||||||
|
wasModified := j.refHash != newHash
|
||||||
|
j.refHash = newHash
|
||||||
|
return wasModified
|
||||||
|
}
|
||||||
|
|
||||||
func (j *JSResponse) GetHeader(name, deflt string) string {
|
func (j *JSResponse) GetHeader(name, deflt string) string {
|
||||||
headers := strings.Split(j.Headers, "\r\n")
|
headers := strings.Split(j.Headers, "\r\n")
|
||||||
for i := 0; i < len(headers); i++ {
|
for i := 0; i < len(headers); i++ {
|
||||||
|
|
|
@ -84,11 +84,9 @@ func (s *HttpProxyScript) OnRequest(original *http.Request) (jsreq *JSRequest, j
|
||||||
if _, err := s.Call("onRequest", jsreq, jsres); err != nil {
|
if _, err := s.Call("onRequest", jsreq, jsres); err != nil {
|
||||||
log.Error("%s", err)
|
log.Error("%s", err)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
} else if jsreq.WasModified() {
|
} else if jsreq.CheckIfModifiedAndUpdateHash() {
|
||||||
jsreq.UpdateHash()
|
|
||||||
return jsreq, nil
|
return jsreq, nil
|
||||||
} else if jsres.WasModified() {
|
} else if jsres.CheckIfModifiedAndUpdateHash() {
|
||||||
jsres.UpdateHash()
|
|
||||||
return nil, jsres
|
return nil, jsres
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -104,8 +102,7 @@ func (s *HttpProxyScript) OnResponse(res *http.Response) (jsreq *JSRequest, jsre
|
||||||
if _, err := s.Call("onResponse", jsreq, jsres); err != nil {
|
if _, err := s.Call("onResponse", jsreq, jsres); err != nil {
|
||||||
log.Error("%s", err)
|
log.Error("%s", err)
|
||||||
return nil, nil
|
return nil, nil
|
||||||
} else if jsres.WasModified() {
|
} else if jsres.CheckIfModifiedAndUpdateHash() {
|
||||||
jsres.UpdateHash()
|
|
||||||
return nil, jsres
|
return nil, jsres
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue