aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/proxy.py
diff options
context:
space:
mode:
authorAldo Cortesi <aldo@nullcube.com>2011-07-22 17:48:42 +1200
committerAldo Cortesi <aldo@nullcube.com>2011-07-22 17:48:42 +1200
commit1b961fc4adb2ef623747102b1539aa4d46c6e743 (patch)
tree941bda1de0d524508a2bc9bfea711ecee15e84f3 /libmproxy/proxy.py
parent9c24401b187fa2915d8b6cc424fc25f5e51369c8 (diff)
downloadmitmproxy-1b961fc4adb2ef623747102b1539aa4d46c6e743.tar.gz
mitmproxy-1b961fc4adb2ef623747102b1539aa4d46c6e743.tar.bz2
mitmproxy-1b961fc4adb2ef623747102b1539aa4d46c6e743.zip
Add utility functions to search and replace strings in flows
This is a common task in pentesting scenarios. This commit adds the following functions: utils.Headers.replace proxy.Request.replace proxy.Response.replace flow.Flow.replace
Diffstat (limited to 'libmproxy/proxy.py')
-rw-r--r--libmproxy/proxy.py29
1 files changed, 29 insertions, 0 deletions
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py
index a7cc31e8..c5e5971a 100644
--- a/libmproxy/proxy.py
+++ b/libmproxy/proxy.py
@@ -280,6 +280,16 @@ class Request(controller.Msg):
else:
return self.FMT_PROXY % (self.method, self.scheme, self.host, self.port, self.path, str(headers), content)
+ def replace(self, pattern, repl, count=0, flags=0):
+ """
+ Replaces a regular expression pattern with repl in both the headers
+ and the body of the request. Returns the number of replacements
+ made.
+ """
+ self.content, c = re.subn(pattern, repl, self.content, count, flags)
+ c += self.headers.replace(pattern, repl, count, flags)
+ return c
+
class Response(controller.Msg):
FMT = '%s\r\n%s\r\n%s'
@@ -406,6 +416,16 @@ class Response(controller.Msg):
data = (proto, str(headers), content)
return self.FMT%data
+ def replace(self, pattern, repl, count=0, flags=0):
+ """
+ Replaces a regular expression pattern with repl in both the headers
+ and the body of the response. Returns the number of replacements
+ made.
+ """
+ self.content, c = re.subn(pattern, repl, self.content, count, flags)
+ c += self.headers.replace(pattern, repl, count, flags)
+ return c
+
class ClientDisconnect(controller.Msg):
def __init__(self, client_conn):
@@ -473,6 +493,15 @@ class Error(controller.Msg):
def __eq__(self, other):
return self.get_state() == other.get_state()
+ def replace(self, pattern, repl, count=0, flags=0):
+ """
+ Replaces a regular expression pattern with repl in both the headers
+ and the body of the request. Returns the number of replacements
+ made.
+ """
+ self.msg, c = re.subn(pattern, repl, self.msg, count, flags)
+ return c
+
class FileLike:
def __init__(self, o):