Display Errors and killed connections in mitmdump.

This commit is contained in:
Aldo Cortesi
2011-03-11 13:06:51 +13:00
parent daa9653ebe
commit 7d85db0da3
4 changed files with 60 additions and 45 deletions

View File

@@ -121,44 +121,68 @@ class DumpMaster(flow.FlowMaster):
l = str(t).strip().split("\n")
return "\n".join(" "*n + i for i in l)
def _process_flow(self, f):
if self.filt and not f.match(self.filt):
return
if f.response:
sz = utils.pretty_size(len(f.response.content))
if self.o.verbosity > 0:
result = " << %s %s"%(str_response(f.response), sz)
if self.o.verbosity > 1:
result = result + "\n\n" + self.indent(4, f.response.headers)
if self.o.verbosity > 2:
if utils.isBin(f.response.content):
d = utils.hexdump(f.response.content)
d = "\n".join("%s\t%s %s"%i for i in d)
cont = self.indent(4, d)
elif f.response.content:
cont = self.indent(4, f.response.content)
else:
cont = ""
result = result + "\n\n" + cont
elif f.error:
result = " << %s"%f.error.msg
if self.o.verbosity == 1:
print >> self.outfile, str_request(f.request)
print >> self.outfile, result
elif self.o.verbosity == 2:
print >> self.outfile, str_request(f.request)
print >> self.outfile, self.indent(4, f.request.headers)
print >> self.outfile
print >> self.outfile, result
print >> self.outfile, "\n"
elif self.o.verbosity == 3:
print >> self.outfile, str_request(f.request)
print >> self.outfile, self.indent(4, f.request.headers)
if utils.isBin(f.request.content):
print >> self.outfile, self.indent(4, utils.hexdump(f.request.content))
elif f.request.content:
print >> self.outfile, self.indent(4, f.request.content)
print >> self.outfile
print >> self.outfile, result
print >> self.outfile, "\n"
self.state.delete_flow(f)
if self.o.wfile:
self.fwriter.add(f)
def handle_response(self, msg):
f = flow.FlowMaster.handle_response(self, msg)
if f:
msg.ack()
if self.filt and not f.match(self.filt):
return
sz = utils.pretty_size(len(f.response.content))
if self.o.verbosity == 1:
print >> self.outfile, str_request(f.request)
print >> self.outfile, " <<",
print >> self.outfile, str_response(f.response), sz
elif self.o.verbosity == 2:
print >> self.outfile, str_request(f.request)
print >> self.outfile, self.indent(4, f.request.headers)
print >> self.outfile
print >> self.outfile, " <<", str_response(f.response), sz
print >> self.outfile, self.indent(4, f.response.headers)
print >> self.outfile, "\n"
elif self.o.verbosity == 3:
print >> self.outfile, str_request(f.request)
print >> self.outfile, self.indent(4, f.request.headers)
if utils.isBin(f.request.content):
print >> self.outfile, self.indent(4, utils.hexdump(f.request.content))
elif f.request.content:
print >> self.outfile, self.indent(4, f.request.content)
print >> self.outfile
print >> self.outfile, " <<", str_response(f.response), sz
print >> self.outfile, self.indent(4, f.response.headers)
if utils.isBin(f.response.content):
print >> self.outfile, self.indent(4, utils.hexdump(f.response.content))
elif f.response.content:
print >> self.outfile, self.indent(4, f.response.content)
print >> self.outfile, "\n"
self.state.delete_flow(f)
if self.o.wfile:
self.fwriter.add(f)
self._process_flow(f)
return f
def handle_error(self, msg):
f = flow.FlowMaster.handle_error(self, msg)
if f:
msg.ack()
self._process_flow(f)
return f
# begin nocover
def run(self):
try:

View File

@@ -288,6 +288,7 @@ class Flow:
return False
def kill(self):
self.error = proxy.Error(self.request, "Connection killed")
if self.request and not self.request.acked:
self.request.ack(None)
elif self.response and not self.response.acked:
@@ -399,10 +400,6 @@ class State:
for i in self.flow_list[:]:
i.accept_intercept()
def kill_flow(self, f):
f.kill()
self.delete_flow(f)
def revert(self, f):
f.revert()
@@ -534,7 +531,8 @@ class FlowMaster(controller.Master):
pb = self.do_server_playback(f)
if not pb:
if self.kill_nonreplay:
self.state.kill_flow(f)
f.kill()
self.handle_error(f.error)
else:
r.ack()
return f

View File

@@ -577,7 +577,7 @@ class ProxyHandler(SocketServer.StreamRequestHandler):
self.finish()
def handle_request(self, cc):
server, request = None, None
server, request, err = None, None, None
try:
request = self.read_request(cc)
if request is None:

View File

@@ -308,13 +308,6 @@ class uState(libpry.AutoTree):
f = state.add_request(req)
f.error = proxy.Error(f.request, "msg")
def test_kill_flow(self):
c = flow.State()
req = tutils.treq()
f = c.add_request(req)
c.kill_flow(f)
assert not c.flow_count()
def test_clear(self):
c = flow.State()
f = self._add_request(c)