aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-09-08 12:20:40 +0200
committerMaximilian Hils <git@maximilianhils.com>2014-09-08 12:20:40 +0200
commit2b2d21aff0bbde86df2fc85fe505f1716bf7b79e (patch)
treea561cb0ec881b5464846cad649820af2bb143f5d /libmproxy
parent8eff2df89e5be8415aeda526e70e10e023ac1b05 (diff)
downloadmitmproxy-2b2d21aff0bbde86df2fc85fe505f1716bf7b79e.tar.gz
mitmproxy-2b2d21aff0bbde86df2fc85fe505f1716bf7b79e.tar.bz2
mitmproxy-2b2d21aff0bbde86df2fc85fe505f1716bf7b79e.zip
add --ignore ui indication
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/console/__init__.py16
-rw-r--r--libmproxy/console/grideditor.py12
-rw-r--r--libmproxy/flow.py14
-rw-r--r--libmproxy/proxy/config.py6
4 files changed, 42 insertions, 6 deletions
diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py
index 5d55cf58..d235a327 100644
--- a/libmproxy/console/__init__.py
+++ b/libmproxy/console/__init__.py
@@ -129,6 +129,10 @@ class StatusBar(common.WWrap):
r.append(":%s in file]"%self.master.server_playback.count())
else:
r.append(":%s to go]"%self.master.server_playback.count())
+ if self.master.get_ignore():
+ r.append("[")
+ r.append(("heading_key", "I"))
+ r.append("gnore:%d]"%len(self.master.get_ignore()))
if self.master.state.intercept_txt:
r.append("[")
r.append(("heading_key", "i"))
@@ -795,6 +799,10 @@ class ConsoleMaster(flow.FlowMaster):
for command in commands:
self.load_script(command)
+ def edit_ignore(self, ignore):
+ patterns = (x[0] for x in ignore)
+ self.set_ignore(patterns)
+
def loop(self):
changed = True
try:
@@ -851,6 +859,14 @@ class ConsoleMaster(flow.FlowMaster):
self.setheaders.set
)
)
+ elif k == "I":
+ self.view_grideditor(
+ grideditor.IgnoreEditor(
+ self,
+ [[x] for x in self.get_ignore()],
+ self.edit_ignore
+ )
+ )
elif k == "i":
self.prompt(
"Intercept filter: ",
diff --git a/libmproxy/console/grideditor.py b/libmproxy/console/grideditor.py
index 642d8638..d629ec82 100644
--- a/libmproxy/console/grideditor.py
+++ b/libmproxy/console/grideditor.py
@@ -493,3 +493,15 @@ class ScriptEditor(GridEditor):
script.Script.parse_command(val)
except script.ScriptError, v:
return str(v)
+
+
+class IgnoreEditor(GridEditor):
+ title = "Editing ignore patterns"
+ columns = 1
+ headings = ("Regex (matched on hostname:port / ip:port)",)
+
+ def is_error(self, col, val):
+ try:
+ re.compile(val, re.IGNORECASE)
+ except re.error as e:
+ return "Invalid regex: %s" % str(e) \ No newline at end of file
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 343466e2..d263ccdd 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -1,6 +1,5 @@
"""
- This module provides more sophisticated flow tracking. These match requests
- with their responses, and provide filtering and interception facilities.
+ This module provides more sophisticated flow tracking and provides filtering and interception facilities.
"""
from __future__ import absolute_import
import base64
@@ -8,12 +7,11 @@ import hashlib, Cookie, cookielib, re, threading
import os
import flask
import requests
-from netlib import odict, wsgi, tcp
+from netlib import odict, wsgi
import netlib.http
from . import controller, protocol, tnetstring, filt, script, version, app
from .protocol import http, handle
-from .proxy.connection import ServerConnection
-from .proxy.primitives import ProxyError
+from .proxy.config import parse_host_pattern
ODict = odict.ODict
ODictCaseless = odict.ODictCaseless
@@ -522,6 +520,12 @@ class FlowMaster(controller.Master):
for script in self.scripts:
self.run_single_script_hook(script, name, *args, **kwargs)
+ def get_ignore(self):
+ return [i.pattern for i in self.server.config.ignore]
+
+ def set_ignore(self, ignore):
+ self.server.config.ignore = parse_host_pattern(ignore)
+
def set_stickycookie(self, txt):
if txt:
flt = filt.parse(txt)
diff --git a/libmproxy/proxy/config.py b/libmproxy/proxy/config.py
index ea815c69..0ff08c6f 100644
--- a/libmproxy/proxy/config.py
+++ b/libmproxy/proxy/config.py
@@ -10,6 +10,10 @@ CONF_BASENAME = "mitmproxy"
CONF_DIR = "~/.mitmproxy"
+def parse_host_pattern(patterns):
+ return [re.compile(p, re.IGNORECASE) for p in patterns]
+
+
class ProxyConfig:
def __init__(self, confdir=CONF_DIR, ca_file=None, clientcerts=None,
no_upstream_cert=False, body_size_limit=None,
@@ -41,7 +45,7 @@ class ProxyConfig:
self.get_upstream_server = get_upstream_server
self.http_form_in = http_form_in
self.http_form_out = http_form_out
- self.ignore = [re.compile(i, re.IGNORECASE) for i in ignore]
+ self.ignore = parse_host_pattern(ignore)
self.authenticator = authenticator
self.confdir = os.path.expanduser(confdir)
self.ca_file = ca_file or os.path.join(self.confdir, CONF_BASENAME + "-ca.pem")