Use ~bq / ~bs for messages sent from client / server

This commit is contained in:
Shadab Zafar 2016-07-15 14:35:18 +05:30
parent 5f7d61f864
commit 262a420553
2 changed files with 31 additions and 19 deletions

View File

@ -219,18 +219,14 @@ class FBod(_Rex):
@only(HTTPFlow, TCPFlow) @only(HTTPFlow, TCPFlow)
def __call__(self, f): def __call__(self, f):
if isinstance(f, HTTPFlow):
# HTTPFlow
if hasattr(f, 'request'):
if f.request and f.request.content: if f.request and f.request.content:
if self.re.search(f.request.get_decoded_content()): if self.re.search(f.request.get_decoded_content()):
return True return True
if f.response and f.response.content: if f.response and f.response.content:
if self.re.search(f.response.get_decoded_content()): if self.re.search(f.response.get_decoded_content()):
return True return True
elif isinstance(f, TCPFlow):
# TCPFlow
elif hasattr(f, 'messages'):
for msg in f.messages: for msg in f.messages:
if self.re.search(msg.content): if self.re.search(msg.content):
return True return True
@ -242,22 +238,32 @@ class FBodRequest(_Rex):
code = "bq" code = "bq"
help = "Request body" help = "Request body"
@only(HTTPFlow) @only(HTTPFlow, TCPFlow)
def __call__(self, f): def __call__(self, f):
if isinstance(f, HTTPFlow):
if f.request and f.request.content: if f.request and f.request.content:
if self.re.search(f.request.get_decoded_content()): if self.re.search(f.request.get_decoded_content()):
return True return True
elif isinstance(f, TCPFlow):
for msg in f.messages:
if msg.from_client and self.re.search(msg.content):
return True
class FBodResponse(_Rex): class FBodResponse(_Rex):
code = "bs" code = "bs"
help = "Response body" help = "Response body"
@only(HTTPFlow) @only(HTTPFlow, TCPFlow)
def __call__(self, f): def __call__(self, f):
if isinstance(f, HTTPFlow):
if f.response and f.response.content: if f.response and f.response.content:
if self.re.search(f.response.get_decoded_content()): if self.re.search(f.response.get_decoded_content()):
return True return True
elif isinstance(f, TCPFlow):
for msg in f.messages:
if not msg.from_client and self.re.search(msg.content):
return True
class FMethod(_Rex): class FMethod(_Rex):

View File

@ -264,15 +264,21 @@ class TestMatchingTCPFlow:
def test_body(self): def test_body(self):
f = self.flow() f = self.flow()
assert not self.q("~b nonexistent", f)
# Messages sent by client or server
assert self.q("~b hello", f) assert self.q("~b hello", f)
assert self.q("~b me", f) assert self.q("~b me", f)
assert not self.q("~b nonexistent", f)
# Request Body # Messages sent by client
assert not self.q("~bq whatever", f) assert self.q("~bq hello", f)
assert not self.q("~bq me", f)
assert not self.q("~bq nonexistent", f)
# Response Body # Messages sent by server
assert not self.q("~bs whatever", f) assert self.q("~bs me", f)
assert not self.q("~bs hello", f)
assert not self.q("~bs nonexistent", f)
def test_src(self): def test_src(self):
f = self.flow() f = self.flow()