aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/cmdline.py2
-rw-r--r--libmproxy/console/__init__.py5
-rw-r--r--libmproxy/console/contentview.py7
-rw-r--r--libmproxy/console/flowview.py9
-rw-r--r--libmproxy/console/grideditor.py2
-rw-r--r--libmproxy/dump.py2
-rw-r--r--libmproxy/flow.py8
-rw-r--r--libmproxy/platform/lsof.py (renamed from libmproxy/platform/pf.py)9
-rw-r--r--libmproxy/platform/osx.py8
9 files changed, 31 insertions, 21 deletions
diff --git a/libmproxy/cmdline.py b/libmproxy/cmdline.py
index b76792cf..6b6c4241 100644
--- a/libmproxy/cmdline.py
+++ b/libmproxy/cmdline.py
@@ -124,7 +124,7 @@ def get_common_options(options):
except ParseException, e:
raise OptionException(e.message)
try:
- v = open(path, "r").read()
+ v = open(path, "rb").read()
except IOError, e:
raise OptionException("Could not read replace file: %s"%path)
reps.append((patt, rex, v))
diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py
index fe75a047..ef799167 100644
--- a/libmproxy/console/__init__.py
+++ b/libmproxy/console/__init__.py
@@ -479,7 +479,7 @@ class ConsoleMaster(flow.FlowMaster):
def _readflow(self, path):
path = os.path.expanduser(path)
try:
- f = file(path, "r")
+ f = file(path, "rb")
flows = list(flow.FlowReader(f).stream())
except (IOError, flow.FlowReadError), v:
return True, v.strerror
@@ -519,13 +519,14 @@ class ConsoleMaster(flow.FlowMaster):
except:
self.statusbar.message("Can't start editor: %s" % " ".join(c))
else:
- data = open(name).read()
+ data = open(name,"rb").read()
self.ui.start()
os.unlink(name)
return data
def spawn_external_viewer(self, data, contenttype):
if contenttype:
+ contenttype = contenttype.split(";")[0]
ext = mimetypes.guess_extension(contenttype) or ""
else:
ext = ""
diff --git a/libmproxy/console/contentview.py b/libmproxy/console/contentview.py
index 53841c73..8dd8ad1d 100644
--- a/libmproxy/console/contentview.py
+++ b/libmproxy/console/contentview.py
@@ -389,8 +389,11 @@ class ViewProtobuf:
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
- out, _ = p.communicate(input=content)
- return out
+ out, err = p.communicate(input=content)
+ if out:
+ return out
+ else:
+ return err
def __call__(self, hdrs, content, limit):
decoded = self.decode_protobuf(content)
diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py
index 8932b912..da5a6c65 100644
--- a/libmproxy/console/flowview.py
+++ b/libmproxy/console/flowview.py
@@ -16,7 +16,7 @@
import os, sys
import urwid
import common, grideditor, contentview
-from .. import utils, flow
+from .. import utils, flow, controller
def _mkhelp():
text = []
@@ -341,7 +341,12 @@ class FlowView(common.WWrap):
conn = self.flow.request
else:
if not self.flow.response:
- self.flow.response = flow.Response(self.flow.request, 200, "OK", flow.ODictCaseless(), "", None)
+ self.flow.response = flow.Response(
+ self.flow.request,
+ self.flow.request.httpversion,
+ 200, "OK", flow.ODictCaseless(), "", None
+ )
+ self.flow.response.reply = controller.DummyReply()
conn = self.flow.response
self.flow.backup()
diff --git a/libmproxy/console/grideditor.py b/libmproxy/console/grideditor.py
index 314d6e88..55f3ba0f 100644
--- a/libmproxy/console/grideditor.py
+++ b/libmproxy/console/grideditor.py
@@ -294,7 +294,7 @@ class GridEditor(common.WWrap):
if p:
try:
p = os.path.expanduser(p)
- d = file(p, "r").read()
+ d = file(p, "rb").read()
self.walker.set_current_value(d, unescaped)
self.walker._modified()
except IOError, v:
diff --git a/libmproxy/dump.py b/libmproxy/dump.py
index b1022ef5..06c15c63 100644
--- a/libmproxy/dump.py
+++ b/libmproxy/dump.py
@@ -141,7 +141,7 @@ class DumpMaster(flow.FlowMaster):
def _readflow(self, path):
path = os.path.expanduser(path)
try:
- f = file(path, "r")
+ f = file(path, "rb")
flows = list(flow.FlowReader(f).stream())
except (IOError, flow.FlowReadError), v:
raise DumpError(v.strerror)
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 50b30fe1..10c5da5d 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -542,7 +542,7 @@ class Request(HTTPMsg):
headers["host"] = [utils.hostport(self.scheme, self.host, self.port)]
content = self.content
if content:
- headers["content-length"] = [str(len(content))]
+ headers["Content-Length"] = [str(len(content))]
else:
content = ""
if self.close:
@@ -737,7 +737,7 @@ class Response(HTTPMsg):
['proxy-connection', 'transfer-encoding']
)
if self.content:
- headers["content-length"] = [str(len(self.content))]
+ headers["Content-Length"] = [str(len(self.content))]
proto = "HTTP/%s.%s %s %s"%(self.httpversion[0], self.httpversion[1], self.code, str(self.msg))
data = (proto, str(headers))
return FMT%data
@@ -827,7 +827,6 @@ class ClientConnect(StateObject):
def __str__(self):
if self.address:
return "%s:%d"%(self.address[0],self.address[1])
- return "None"
def _load_state(self, state):
self.close = True
@@ -934,6 +933,7 @@ class ClientPlaybackState:
"""
if self.flows and not self.current:
n = self.flows.pop(0)
+ n.request.reply = controller.DummyReply()
n.request.client_conn = None
self.current = master.handle_request(n.request)
if not testing and not self.current.response:
@@ -1548,7 +1548,7 @@ class FlowMaster(controller.Master):
if f.request:
f.request._set_replay()
if f.request.content:
- f.request.headers["content-length"] = [str(len(f.request.content))]
+ f.request.headers["Content-Length"] = [str(len(f.request.content))]
f.response = None
f.error = None
self.process_new_request(f)
diff --git a/libmproxy/platform/pf.py b/libmproxy/platform/lsof.py
index 062d3311..25c0e33f 100644
--- a/libmproxy/platform/pf.py
+++ b/libmproxy/platform/lsof.py
@@ -1,3 +1,4 @@
+import re
def lookup(address, port, s):
"""
@@ -8,9 +9,9 @@ def lookup(address, port, s):
"""
spec = "%s:%s"%(address, port)
for i in s.split("\n"):
- if "ESTABLISHED:ESTABLISHED" in i and spec in i:
- s = i.split()
- if len(s) > 4:
- s = s[4].split(":")
+ if "ESTABLISHED" in i and spec in i:
+ m = re.match(".* (\S*)->%s" % spec, i)
+ if m:
+ s = m.group(1).split(":")
if len(s) == 2:
return s[0], int(s[1])
diff --git a/libmproxy/platform/osx.py b/libmproxy/platform/osx.py
index dda5d9af..1a474e94 100644
--- a/libmproxy/platform/osx.py
+++ b/libmproxy/platform/osx.py
@@ -1,16 +1,16 @@
import subprocess
-import pf
+import lsof
"""
Doing this the "right" way by using DIOCNATLOOK on the pf device turns out
to be a pain. Apple has made a number of modifications to the data
structures returned, and compiling userspace tools to test and work with
- this turns out to be a pain in the ass. Parsing pfctl output is short,
+ this turns out to be a pain in the ass. Parsing lsof output is short,
simple, and works.
"""
class Resolver:
- STATECMD = ("sudo", "-n", "/sbin/pfctl", "-s", "state")
+ STATECMD = ("sudo", "-n", "/usr/sbin/lsof", "-n", "-P", "-i", "TCP")
def __init__(self):
pass
@@ -20,4 +20,4 @@ class Resolver:
stxt = subprocess.check_output(self.STATECMD, stderr=subprocess.STDOUT)
except subprocess.CalledProcessError:
return None
- return pf.lookup(peer[0], peer[1], stxt)
+ return lsof.lookup(peer[0], peer[1], stxt)