aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/cmdline.py18
-rw-r--r--libmproxy/console/__init__.py6
-rw-r--r--libmproxy/dump.py6
-rw-r--r--libmproxy/flow.py15
-rw-r--r--libmproxy/proxy.py19
5 files changed, 45 insertions, 19 deletions
diff --git a/libmproxy/cmdline.py b/libmproxy/cmdline.py
index 6b6c4241..9ed4ef7b 100644
--- a/libmproxy/cmdline.py
+++ b/libmproxy/cmdline.py
@@ -17,6 +17,9 @@ import proxy
import re, filt
import argparse
+APP_DOMAIN = "mitm"
+APP_IP = "1.1.1.1"
+
class ParseException(Exception): pass
class OptionException(Exception): pass
@@ -139,6 +142,10 @@ def get_common_options(options):
setheaders.append(p)
return dict(
+ app = options.app,
+ app_ip = options.app_ip,
+ app_domain = options.app_domain,
+
anticache = options.anticache,
anticomp = options.anticomp,
client_replay = options.client_replay,
@@ -267,6 +274,17 @@ def common_options(parser):
action="store_true", dest="app", default=False,
help="Enable the mitmproxy web app."
)
+ group.add_argument(
+ "--appdomain",
+ action="store", dest="app_domain", default=APP_DOMAIN, metavar="domain",
+ help="Domain to serve the app from."
+ )
+ group.add_argument(
+ "--appip",
+ action="store", dest="app_ip", default=APP_IP, metavar="ip",
+ help="""IP to serve the app from. Useful for transparent mode, when a DNS
+ entry for the app domain is not present."""
+ )
group = parser.add_argument_group("Client Replay")
group.add_argument(
diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py
index ef799167..dd3adaa9 100644
--- a/libmproxy/console/__init__.py
+++ b/libmproxy/console/__init__.py
@@ -328,6 +328,9 @@ class ConsoleState(flow.State):
class Options(object):
attributes = [
+ "app",
+ "app_domain",
+ "app_ip",
"anticache",
"anticomp",
"client_replay",
@@ -426,6 +429,9 @@ class ConsoleMaster(flow.FlowMaster):
print >> sys.stderr, "Script load error:", err
sys.exit(1)
+ if options.app:
+ self.start_app(options.app_domain, options.app_ip)
+
def start_stream(self, path):
path = os.path.expanduser(path)
try:
diff --git a/libmproxy/dump.py b/libmproxy/dump.py
index 06c15c63..5a51919c 100644
--- a/libmproxy/dump.py
+++ b/libmproxy/dump.py
@@ -22,6 +22,9 @@ class DumpError(Exception): pass
class Options(object):
attributes = [
+ "app",
+ "app_domain",
+ "app_ip",
"anticache",
"anticomp",
"client_replay",
@@ -138,6 +141,9 @@ class DumpMaster(flow.FlowMaster):
except flow.FlowReadError, v:
self.add_event("Flow file corrupted. Stopped loading.")
+ if self.o.app:
+ self.start_app(self.o.app_domain, self.o.app_ip)
+
def _readflow(self, path):
path = os.path.expanduser(path)
try:
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 427f1547..e5061dfb 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -1376,6 +1376,18 @@ class FlowMaster(controller.Master):
self.stream = None
app.mapp.config["PMASTER"] = self
+ def start_app(self, domain, ip):
+ self.server.apps.add(
+ app.mapp,
+ domain,
+ 80
+ )
+ self.server.apps.add(
+ app.mapp,
+ ip,
+ 80
+ )
+
def add_event(self, e, level="info"):
"""
level: info, error
@@ -1655,7 +1667,7 @@ class FlowReader:
try:
while 1:
data = tnetstring.load(self.fo)
- if tuple(data["version"][:1]) != version.IVERSION[:1]:
+ if tuple(data["version"][:2]) != version.IVERSION[:2]:
v = ".".join(str(i) for i in data["version"])
raise FlowReadError("Incompatible serialized data version: %s"%v)
off = self.fo.tell()
@@ -1678,4 +1690,3 @@ class FilteredFlowWriter:
d = f._get_state()
tnetstring.dump(d, self.fo)
-
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py
index e68aae87..a7d8d2ba 100644
--- a/libmproxy/proxy.py
+++ b/libmproxy/proxy.py
@@ -17,11 +17,9 @@ import shutil, tempfile, threading
import SocketServer
from OpenSSL import SSL
from netlib import odict, tcp, http, wsgi, certutils, http_status, http_auth
-import utils, flow, version, platform, controller, app
+import utils, flow, version, platform, controller
-APP_DOMAIN = "mitm"
-APP_IP = "1.1.1.1"
KILL = 0
@@ -39,8 +37,7 @@ class Log:
class ProxyConfig:
- def __init__(self, app=False, certfile = None, cacert = None, clientcerts = None, no_upstream_cert=False, body_size_limit = None, reverse_proxy=None, transparent_proxy=None, certdir = None, authenticator=None):
- self.app = app
+ def __init__(self, certfile = None, cacert = None, clientcerts = None, no_upstream_cert=False, body_size_limit = None, reverse_proxy=None, transparent_proxy=None, certdir = None, authenticator=None):
self.certfile = certfile
self.cacert = cacert
self.clientcerts = clientcerts
@@ -512,17 +509,6 @@ class ProxyServer(tcp.TCPServer):
raise ProxyServerError('Error starting proxy server: ' + v.strerror)
self.channel = None
self.apps = AppRegistry()
- if config.app:
- self.apps.add(
- app.mapp,
- APP_DOMAIN,
- 80
- )
- self.apps.add(
- app.mapp,
- APP_IP,
- 80
- )
def start_slave(self, klass, channel):
slave = klass(channel, self)
@@ -655,7 +641,6 @@ def process_proxy_options(parser, options):
authenticator = http_auth.NullProxyAuth(None)
return ProxyConfig(
- app = options.app,
certfile = options.cert,
cacert = cacert,
clientcerts = options.clientcerts,