Beispiel #1
0
    def __init__(self, server, options):
        flow.FlowMaster.__init__(self, options, server, flow.DummyState())
        self.has_errored = False
        self.addons.add(*builtins.default_addons())
        self.addons.add(dumper.Dumper())
        self.addons.add(termlog.TermLog())
        # This line is just for type hinting
        self.options = self.options  # type: Options
        self.set_stream_large_bodies(options.stream_large_bodies)

        if not self.options.no_server and server:
            self.add_log(
                "Proxy server listening at http://{}".format(server.address),
                "info")

        if self.server and self.options.http2 and not tcp.HAS_ALPN:  # pragma: no cover
            self.add_log(
                "ALPN support missing (OpenSSL 1.0.2+ required)!\n"
                "HTTP/2 is disabled. Use --no-http2 to silence this warning.",
                "error")

        if options.rfile:
            try:
                self.load_flows_file(options.rfile)
            except exceptions.FlowReadException as v:
                self.add_log("Flow file corrupted.", "error")
                raise DumpError(v)

        if self.options.app:
            self.start_app(self.options.app_host, self.options.app_port)
Beispiel #2
0
    def __init__(self, server, options):
        flow.FlowMaster.__init__(self, options, server, flow.State())
        self.has_errored = False
        self.addons.add(options, *builtins.default_addons())
        self.addons.add(options, dumper.Dumper())
        # This line is just for type hinting
        self.options = self.options  # type: Options
        self.replay_ignore_params = options.replay_ignore_params
        self.replay_ignore_content = options.replay_ignore_content
        self.replay_ignore_host = options.replay_ignore_host
        self.refresh_server_playback = options.refresh_server_playback
        self.replay_ignore_payload_params = options.replay_ignore_payload_params

        self.set_stream_large_bodies(options.stream_large_bodies)

        if self.server and self.options.http2 and not tcp.HAS_ALPN:  # pragma: no cover
            print(
                "ALPN support missing (OpenSSL 1.0.2+ required)!\n"
                "HTTP/2 is disabled. Use --no-http2 to silence this warning.",
                file=sys.stderr)

        if options.client_replay:
            self.start_client_playback(self._readflow(options.client_replay),
                                       not options.keepserving)

        if options.rfile:
            try:
                self.load_flows_file(options.rfile)
            except exceptions.FlowReadException as v:
                self.add_log("Flow file corrupted.", "error")
                raise DumpError(v)

        if self.options.app:
            self.start_app(self.options.app_host, self.options.app_port)
Beispiel #3
0
    def test_simple(self):
        d = dumper.Dumper()
        sio = StringIO()

        updated = {"tfile", "flow_detail"}
        d.configure(dump.Options(tfile=sio, flow_detail=0), updated)
        d.response(tutils.tflow())
        assert not sio.getvalue()

        d.configure(dump.Options(tfile=sio, flow_detail=4), updated)
        d.response(tutils.tflow())
        assert sio.getvalue()

        sio = StringIO()
        d.configure(dump.Options(tfile=sio, flow_detail=4), updated)
        d.response(tutils.tflow(resp=True))
        assert "<<" in sio.getvalue()

        sio = StringIO()
        d.configure(dump.Options(tfile=sio, flow_detail=4), updated)
        d.response(tutils.tflow(err=True))
        assert "<<" in sio.getvalue()

        sio = StringIO()
        d.configure(dump.Options(tfile=sio, flow_detail=4), updated)
        flow = tutils.tflow()
        flow.request = netlib.tutils.treq()
        flow.request.stickycookie = True
        flow.client_conn = mock.MagicMock()
        flow.client_conn.address.host = "foo"
        flow.response = netlib.tutils.tresp(content=None)
        flow.response.is_replay = True
        flow.response.status_code = 300
        d.response(flow)
        assert sio.getvalue()

        sio = StringIO()
        d.configure(dump.Options(tfile=sio, flow_detail=4), updated)
        flow = tutils.tflow(resp=netlib.tutils.tresp(content=b"{"))
        flow.response.headers["content-type"] = "application/json"
        flow.response.status_code = 400
        d.response(flow)
        assert sio.getvalue()

        sio = StringIO()
        d.configure(dump.Options(tfile=sio), updated)
        flow = tutils.tflow()
        flow.request.content = None
        flow.response = models.HTTPResponse.wrap(netlib.tutils.tresp())
        flow.response.content = None
        d.response(flow)
        assert "content missing" in sio.getvalue()
Beispiel #4
0
    def test_contentview(self, view_auto):
        view_auto.side_effect = exceptions.ContentViewException("")

        s = state.State()
        sio = StringIO()
        o = dump.Options(
            flow_detail=4,
            verbosity=3,
            tfile=sio,
        )
        m = mastertest.RecordingMaster(o, None, s)
        d = dumper.Dumper()
        m.addons.add(o, d)
        self.invoke(m, "response", tutils.tflow())
        assert "Content viewer failed" in m.event_log[0][1]