aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-09-08 14:43:05 +0200
committerMaximilian Hils <git@maximilianhils.com>2014-09-08 14:43:32 +0200
commitece15b3c8af790e425ebcaa6807d6e133d810ff6 (patch)
tree25b238db6e1ecd01fb892efca3b2011d6289ad08
parentd06b4bfa4e4cc51e903b49e246d7771726a3e3a4 (diff)
downloadmitmproxy-ece15b3c8af790e425ebcaa6807d6e133d810ff6.tar.gz
mitmproxy-ece15b3c8af790e425ebcaa6807d6e133d810ff6.tar.bz2
mitmproxy-ece15b3c8af790e425ebcaa6807d6e133d810ff6.zip
reverse proxy: adjust dst when reading flows, fix #346
-rw-r--r--libmproxy/flow.py5
-rw-r--r--test/test_flow.py13
2 files changed, 16 insertions, 2 deletions
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index d263ccdd..6aa26f4a 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -615,6 +615,11 @@ class FlowMaster(controller.Master):
"""
Loads a flow, and returns a new flow object.
"""
+
+ if self.server and self.server.config.mode == "reverse":
+ f.request.host, f.request.port = self.server.config.mode.dst[2:]
+ f.request.scheme = "https" if self.server.config.mode.dst[1] else "http"
+
f.reply = controller.DummyReply()
if f.request:
self.handle_request(f)
diff --git a/test/test_flow.py b/test/test_flow.py
index a297bf5f..399c8827 100644
--- a/test/test_flow.py
+++ b/test/test_flow.py
@@ -5,8 +5,9 @@ import mock
from libmproxy import filt, protocol, controller, utils, tnetstring, flow
from libmproxy.protocol.primitives import Error, Flow
from libmproxy.protocol.http import decoded, CONTENT_MISSING
-from libmproxy.proxy.connection import ClientConnection, ServerConnection
-from netlib import tcp
+from libmproxy.proxy import ProxyConfig
+from libmproxy.proxy.server import DummyServer
+from libmproxy.proxy.connection import ClientConnection
import tutils
@@ -491,6 +492,14 @@ class TestSerialize:
fm.load_flows(r)
assert len(s._flow_list) == 6
+ def test_load_flows_reverse(self):
+ r = self._treader()
+ s = flow.State()
+ conf = ProxyConfig(mode="reverse", upstream_server=[True,True,"use-this-domain",80])
+ fm = flow.FlowMaster(DummyServer(conf), s)
+ fm.load_flows(r)
+ assert s._flow_list[0].request.host == "use-this-domain"
+
def test_filter(self):
sio = StringIO()
fl = filt.parse("~c 200")