diff options
author | Thomas Kriechbaumer <thomas@kriechbaumer.name> | 2016-09-29 12:46:56 +0200 |
---|---|---|
committer | Thomas Kriechbaumer <thomas@kriechbaumer.name> | 2016-10-03 11:45:54 +0200 |
commit | ba842489103caba2691084a1f32f3c79f8f564d6 (patch) | |
tree | 0f59f5361da6db63a28ca6830101eccf300edfad /mitmproxy | |
parent | 611dad12a7a94fd90619a2db44cd42aab922b4e2 (diff) | |
download | mitmproxy-ba842489103caba2691084a1f32f3c79f8f564d6.tar.gz mitmproxy-ba842489103caba2691084a1f32f3c79f8f564d6.tar.bz2 mitmproxy-ba842489103caba2691084a1f32f3c79f8f564d6.zip |
rename mitmproxy.filt -> mitmproxy.flowfilter
Diffstat (limited to 'mitmproxy')
-rw-r--r-- | mitmproxy/builtins/dumper.py | 6 | ||||
-rw-r--r-- | mitmproxy/builtins/filestreamer.py | 9 | ||||
-rw-r--r-- | mitmproxy/builtins/replace.py | 12 | ||||
-rw-r--r-- | mitmproxy/builtins/setheaders.py | 16 | ||||
-rw-r--r-- | mitmproxy/builtins/stickyauth.py | 5 | ||||
-rw-r--r-- | mitmproxy/builtins/stickycookie.py | 4 | ||||
-rw-r--r-- | mitmproxy/cmdline.py | 4 | ||||
-rw-r--r-- | mitmproxy/console/grideditor/editors.py | 8 | ||||
-rw-r--r-- | mitmproxy/console/help.py | 26 | ||||
-rw-r--r-- | mitmproxy/console/master.py | 2 | ||||
-rw-r--r-- | mitmproxy/flow/state.py | 28 | ||||
-rw-r--r-- | mitmproxy/flowfilter.py (renamed from mitmproxy/filt.py) | 42 | ||||
-rw-r--r-- | mitmproxy/models/flow.py | 22 | ||||
-rw-r--r-- | mitmproxy/web/app.py | 8 |
14 files changed, 94 insertions, 98 deletions
diff --git a/mitmproxy/builtins/dumper.py b/mitmproxy/builtins/dumper.py index 60d00518..0a7738a6 100644 --- a/mitmproxy/builtins/dumper.py +++ b/mitmproxy/builtins/dumper.py @@ -9,7 +9,7 @@ import typing # noqa from mitmproxy import contentviews from mitmproxy import ctx from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter from netlib import human from netlib import strutils @@ -22,14 +22,14 @@ def indent(n, text): class Dumper(object): def __init__(self): - self.filter = None # type: filt.TFilter + self.filter = None # type: flowfilter.TFilter self.flow_detail = None # type: int self.outfp = None # type: typing.io.TextIO self.showhost = None # type: bool def configure(self, options, updated): if options.filtstr: - self.filter = filt.parse(options.filtstr) + self.filter = flowfilter.parse(options.filtstr) if not self.filter: raise exceptions.OptionsError( "Invalid filter expression: %s" % options.filtstr diff --git a/mitmproxy/builtins/filestreamer.py b/mitmproxy/builtins/filestreamer.py index ffa565ac..55427753 100644 --- a/mitmproxy/builtins/filestreamer.py +++ b/mitmproxy/builtins/filestreamer.py @@ -2,6 +2,7 @@ from __future__ import absolute_import, print_function, division import os.path from mitmproxy import exceptions +from mitmproxy import flowfilter from mitmproxy.flow import io @@ -25,17 +26,17 @@ class FileStreamer: self.done() if options.outfile: - filt = None + flt = None if options.get("filtstr"): - filt = filt.parse(options.filtstr) - if not filt: + flt = flowfilter.parse(options.filtstr) + if not flt: raise exceptions.OptionsError( "Invalid filter specification: %s" % options.filtstr ) path, mode = options.outfile if mode not in ("wb", "ab"): raise exceptions.OptionsError("Invalid mode.") - err = self.start_stream_to_path(path, mode, filt) + err = self.start_stream_to_path(path, mode, flt) if err: raise exceptions.OptionsError(err) diff --git a/mitmproxy/builtins/replace.py b/mitmproxy/builtins/replace.py index df3cab04..b675b779 100644 --- a/mitmproxy/builtins/replace.py +++ b/mitmproxy/builtins/replace.py @@ -1,7 +1,7 @@ import re from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter class Replace: @@ -18,8 +18,8 @@ class Replace: """ lst = [] for fpatt, rex, s in options.replacements: - cpatt = filt.parse(fpatt) - if not cpatt: + flt = flowfilter.parse(fpatt) + if not flt: raise exceptions.OptionsError( "Invalid filter pattern: %s" % fpatt ) @@ -29,12 +29,12 @@ class Replace: raise exceptions.OptionsError( "Invalid regular expression: %s - %s" % (rex, str(e)) ) - lst.append((rex, s, cpatt)) + lst.append((rex, s, flt)) self.lst = lst def execute(self, f): - for rex, s, cpatt in self.lst: - if cpatt(f): + for rex, s, flt in self.lst: + if flt(f): if f.response: f.response.replace(rex, s, flags=re.DOTALL) else: diff --git a/mitmproxy/builtins/setheaders.py b/mitmproxy/builtins/setheaders.py index 4cb9905e..5695e1e8 100644 --- a/mitmproxy/builtins/setheaders.py +++ b/mitmproxy/builtins/setheaders.py @@ -1,5 +1,5 @@ from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter class SetHeaders: @@ -15,19 +15,19 @@ class SetHeaders: value: Header value string """ for fpatt, header, value in options.setheaders: - cpatt = filt.parse(fpatt) - if not cpatt: + flt = flowfilter.parse(fpatt) + if not flt: raise exceptions.OptionsError( "Invalid setheader filter pattern %s" % fpatt ) - self.lst.append((fpatt, header, value, cpatt)) + self.lst.append((fpatt, header, value, flt)) def run(self, f, hdrs): - for _, header, value, cpatt in self.lst: - if cpatt(f): + for _, header, value, flt in self.lst: + if flt(f): hdrs.pop(header, None) - for _, header, value, cpatt in self.lst: - if cpatt(f): + for _, header, value, flt in self.lst: + if flt(f): hdrs.add(header, value) def request(self, flow): diff --git a/mitmproxy/builtins/stickyauth.py b/mitmproxy/builtins/stickyauth.py index 98fb65ed..51728c23 100644 --- a/mitmproxy/builtins/stickyauth.py +++ b/mitmproxy/builtins/stickyauth.py @@ -1,18 +1,17 @@ from __future__ import absolute_import, print_function, division -from mitmproxy import filt from mitmproxy import exceptions +from mitmproxy import flowfilter class StickyAuth: def __init__(self): - # Compiled filter self.flt = None self.hosts = {} def configure(self, options, updated): if options.stickyauth: - flt = filt.parse(options.stickyauth) + flt = flowfilter.parse(options.stickyauth) if not flt: raise exceptions.OptionsError( "stickyauth: invalid filter expression: %s" % options.stickyauth diff --git a/mitmproxy/builtins/stickycookie.py b/mitmproxy/builtins/stickycookie.py index 88333d5c..028eea9c 100644 --- a/mitmproxy/builtins/stickycookie.py +++ b/mitmproxy/builtins/stickycookie.py @@ -3,7 +3,7 @@ from six.moves import http_cookiejar from netlib.http import cookies from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter def ckey(attrs, f): @@ -34,7 +34,7 @@ class StickyCookie: def configure(self, options, updated): if options.stickycookie: - flt = filt.parse(options.stickycookie) + flt = flowfilter.parse(options.stickycookie) if not flt: raise exceptions.OptionsError( "stickycookie: invalid filter expression: %s" % options.stickycookie diff --git a/mitmproxy/cmdline.py b/mitmproxy/cmdline.py index ff431909..e97be5d4 100644 --- a/mitmproxy/cmdline.py +++ b/mitmproxy/cmdline.py @@ -4,7 +4,7 @@ import configargparse import os import re from mitmproxy import exceptions -from mitmproxy import filt +from mitmproxy import flowfilter from mitmproxy import options from mitmproxy import platform from netlib import human @@ -32,7 +32,7 @@ def _parse_hook(s): if not a: raise ParseException("Empty clause: %s" % str(patt)) - if not filt.parse(patt): + if not flowfilter.parse(patt): raise ParseException("Malformed filter pattern: %s" % patt) return patt, a, b diff --git a/mitmproxy/console/grideditor/editors.py b/mitmproxy/console/grideditor/editors.py index a17fd766..0c9a2a02 100644 --- a/mitmproxy/console/grideditor/editors.py +++ b/mitmproxy/console/grideditor/editors.py @@ -1,9 +1,9 @@ from __future__ import absolute_import, print_function, division import re import urwid -from mitmproxy import filt -from mitmproxy.builtins import script from mitmproxy import exceptions +from mitmproxy import flowfilter +from mitmproxy.builtins import script from mitmproxy.console import common from mitmproxy.console.grideditor import base from mitmproxy.console.grideditor import col_bytes @@ -81,7 +81,7 @@ class ReplaceEditor(base.GridEditor): def is_error(self, col, val): if col == 0: - if not filt.parse(val): + if not flowfilter.parse(val): return "Invalid filter specification." elif col == 1: try: @@ -101,7 +101,7 @@ class SetHeadersEditor(base.GridEditor): def is_error(self, col, val): if col == 0: - if not filt.parse(val): + if not flowfilter.parse(val): return "Invalid filter specification" return False diff --git a/mitmproxy/console/help.py b/mitmproxy/console/help.py index e3e2f54c..7393d7c4 100644 --- a/mitmproxy/console/help.py +++ b/mitmproxy/console/help.py @@ -4,7 +4,7 @@ import platform import urwid -from mitmproxy import filt +from mitmproxy import flowfilter from mitmproxy.console import common from mitmproxy.console import signals @@ -60,29 +60,7 @@ class HelpView(urwid.ListBox): ) text.append(urwid.Text([("head", "\n\nFilter expressions:\n")])) - f = [] - for i in filt.filt_unary: - f.append( - ("~%s" % i.code, i.help) - ) - for i in filt.filt_rex: - f.append( - ("~%s regex" % i.code, i.help) - ) - for i in filt.filt_int: - f.append( - ("~%s int" % i.code, i.help) - ) - f.sort() - f.extend( - [ - ("!", "unary not"), - ("&", "and"), - ("|", "or"), - ("(...)", "grouping"), - ] - ) - text.extend(common.format_keyvals(f, key="key", val="text", indent=4)) + text.extend(common.format_keyvals(flowfilter.help, key="key", val="text", indent=4)) text.append( urwid.Text( diff --git a/mitmproxy/console/master.py b/mitmproxy/console/master.py index 6652bf0c..75a27c39 100644 --- a/mitmproxy/console/master.py +++ b/mitmproxy/console/master.py @@ -34,7 +34,7 @@ from mitmproxy.console import palettes from mitmproxy.console import signals from mitmproxy.console import statusbar from mitmproxy.console import window -from mitmproxy.filt import FMarked +from mitmproxy.flowfilter import FMarked from netlib import tcp, strutils EVENTLOG_SIZE = 500 diff --git a/mitmproxy/flow/state.py b/mitmproxy/flow/state.py index 8576fadc..759e53e4 100644 --- a/mitmproxy/flow/state.py +++ b/mitmproxy/flow/state.py @@ -5,7 +5,7 @@ from abc import abstractmethod, ABCMeta import six from typing import List # noqa -from mitmproxy import filt +from mitmproxy import flowfilter from mitmproxy import models # noqa @@ -53,11 +53,11 @@ def _pos(*args): class FlowView(FlowList): - def __init__(self, store, filt=None): + def __init__(self, store, flt=None): super(FlowView, self).__init__() - if not filt: - filt = _pos - self._build(store, filt) + if not flt: + flt = _pos + self._build(store, flt) self.store = store self.store.views.append(self) @@ -65,9 +65,9 @@ class FlowView(FlowList): def _close(self): self.store.views.remove(self) - def _build(self, flows, filt=None): - if filt: - self.filt = filt + def _build(self, flows, flt=None): + if flt: + self.filt = flt self._list = list(filter(self.filt, flows)) def _add(self, f): @@ -229,21 +229,21 @@ class State(object): if txt == self.filter_txt: return if txt: - f = filt.parse(txt) - if not f: + flt = flowfilter.parse(txt) + if not flt: return "Invalid filter expression." self.view._close() - self.view = FlowView(self.flows, f) + self.view = FlowView(self.flows, flt) else: self.view._close() self.view = FlowView(self.flows, None) def set_intercept(self, txt): if txt: - f = filt.parse(txt) - if not f: + flt = flowfilter.parse(txt) + if not flt: return "Invalid filter expression." - self.intercept = f + self.intercept = flt else: self.intercept = None diff --git a/mitmproxy/filt.py b/mitmproxy/flowfilter.py index eb3e392b..a6398957 100644 --- a/mitmproxy/filt.py +++ b/mitmproxy/flowfilter.py @@ -408,7 +408,7 @@ class FNot(_Token): return not self.itm(f) -filt_unary = [ +filter_unary = [ FAsset, FErr, FHTTP, @@ -417,7 +417,7 @@ filt_unary = [ FResp, FTCP, ] -filt_rex = [ +filter_rex = [ FBod, FBodRequest, FBodResponse, @@ -433,7 +433,7 @@ filt_rex = [ FSrc, FUrl, ] -filt_int = [ +filter_int = [ FCode ] @@ -442,7 +442,7 @@ def _make(): # Order is important - multi-char expressions need to come before narrow # ones. parts = [] - for klass in filt_unary: + for klass in filter_unary: f = pp.Literal("~%s" % klass.code) + pp.WordEnd() f.setParseAction(klass.make) parts.append(f) @@ -451,12 +451,12 @@ def _make(): rex = pp.Word(simplerex) |\ pp.QuotedString("\"", escChar='\\') |\ pp.QuotedString("'", escChar='\\') - for klass in filt_rex: + for klass in filter_rex: f = pp.Literal("~%s" % klass.code) + pp.WordEnd() + rex.copy() f.setParseAction(klass.make) parts.append(f) - for klass in filt_int: + for klass in filter_int: f = pp.Literal("~%s" % klass.code) + pp.WordEnd() + pp.Word(pp.nums) f.setParseAction(klass.make) parts.append(f) @@ -492,25 +492,43 @@ TFilter = Callable[[Flow], bool] def parse(s): # type: (str) -> TFilter try: - filt = bnf.parseString(s, parseAll=True)[0] - filt.pattern = s - return filt + flt = bnf.parseString(s, parseAll=True)[0] + flt.pattern = s + return flt except pp.ParseException: return None except ValueError: return None +def match(self, flow, flt): + """ + Match a flow against a compiled filter expression. + Returns True if matched, False if not. + + If flt is a string, it will be compiled as a filter expression. + If the expression is invalid, ValueError is raised. + """ + if isinstance(flt, six.string_types): + + flt = parse(flt) + if not flt: + raise ValueError("Invalid filter expression.") + if flt: + return flt(flow) + return True + + help = [] -for i in filt_unary: +for i in filter_unary: help.append( ("~%s" % i.code, i.help) ) -for i in filt_rex: +for i in filter_rex: help.append( ("~%s regex" % i.code, i.help) ) -for i in filt_int: +for i in filter_int: help.append( ("~%s int" % i.code, i.help) ) diff --git a/mitmproxy/models/flow.py b/mitmproxy/models/flow.py index fc673274..f8c0b210 100644 --- a/mitmproxy/models/flow.py +++ b/mitmproxy/models/flow.py @@ -189,20 +189,20 @@ class Flow(stateobject.StateObject): self.reply.commit() master.handle_accept_intercept(self) - def match(self, f): + def match(self, flt): """ - Match this flow against a compiled filter expression. Returns True - if matched, False if not. + Matches a flow against a compiled filter expression. + Returns True if matched, False if not. - If f is a string, it will be compiled as a filter expression. If - the expression is invalid, ValueError is raised. + If flt is a string, it will be compiled as a filter expression. + If the expression is invalid, ValueError is raised. """ - if isinstance(f, six.string_types): - from .. import filt + if isinstance(flt, six.string_types): + from ..flowfilter import parse - f = filt.parse(f) - if not f: + flt = parse(flt) + if not flt: raise ValueError("Invalid filter expression.") - if f: - return f(self) + if flt: + return flt(self) return True diff --git a/mitmproxy/web/app.py b/mitmproxy/web/app.py index 5498c2d9..34969870 100644 --- a/mitmproxy/web/app.py +++ b/mitmproxy/web/app.py @@ -14,7 +14,7 @@ import tornado.web from io import BytesIO from mitmproxy.flow import FlowWriter, FlowReader -from mitmproxy import filt +from mitmproxy import flowfilter from mitmproxy import models from mitmproxy import contentviews from netlib import version @@ -151,11 +151,11 @@ class IndexHandler(RequestHandler): self.render("index.html") -class FiltHelp(RequestHandler): +class FilterHelp(RequestHandler): def get(self): self.write(dict( - commands=filt.help + commands=flowfilter.help )) @@ -434,7 +434,7 @@ class Application(tornado.web.Application): self.master = master handlers = [ (r"/", IndexHandler), - (r"/filter-help", FiltHelp), + (r"/filter-help", FilterHelp), (r"/updates", ClientConnection), (r"/events", Events), (r"/flows", Flows), |