mirror of
https://github.com/zhigang1992/mitmproxy.git
synced 2026-04-24 04:14:57 +08:00
Display Errors and killed connections in mitmdump.
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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:
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user