示例#1
0
 def test_roundtrip_server_via(self):
     s = tflow.tserver_conn()
     s.via = tflow.tserver_conn()
     del s.reply
     s.wfile = None
     s.rfile = None
     ps = protobuf._dump_http_server_conn(s)
     ls = protobuf._load_http_server_conn(ps)
     assert s.__dict__ == ls.__dict__
     del s.via.reply
     s.via.wfile = None
     s.via.rfile = None
     assert s.via.__dict__ == ls.via.__dict__
示例#2
0
 def test_roundtrip_server_via(self):
     s = tflow.tserver_conn()
     s.via = tflow.tserver_conn()
     del s.reply
     s.wfile = None
     s.rfile = None
     ps = protobuf._dump_http_server_conn(s)
     ls = protobuf._load_http_server_conn(ps)
     assert s.__dict__ == ls.__dict__
     del s.via.reply
     s.via.wfile = None
     s.via.rfile = None
     assert s.via.__dict__ == ls.via.__dict__
示例#3
0
    def test_playback(self):
        cp = clientplayback.ClientPlayback()
        with taddons.context() as tctx:
            assert cp.count() == 0
            f = tflow.tflow(resp=True)
            cp.start_replay([f])
            assert cp.count() == 1
            RP = "mitmproxy.proxy.protocol.http_replay.RequestReplayThread"
            with mock.patch(RP) as rp:
                assert not cp.current_thread
                cp.tick()
                assert rp.called
                assert cp.current_thread

            cp.flows = []
            cp.current_thread.is_alive.return_value = False
            assert cp.count() == 1
            cp.tick()
            assert cp.count() == 0
            assert tctx.master.has_event("update")
            assert tctx.master.has_event("processing_complete")

            cp.current_thread = MockThread()
            cp.tick()
            assert cp.current_thread is None

            cp.start_replay([f])
            cp.stop_replay()
            assert not cp.flows

            df = tflow.DummyFlow(tflow.tclient_conn(), tflow.tserver_conn(),
                                 True)
            with pytest.raises(exceptions.CommandError,
                               match="Can't replay live flow."):
                cp.start_replay([df])
示例#4
0
 def test_or(self):
     f = self.flow()
     f.server_conn = tflow.tserver_conn()
     assert self.q("~b hello | ~b me", f)
     assert self.q("~src :22 | ~b me", f)
     assert not self.q("~src :99 | ~dst :99", f)
     assert self.q("(~src :22 | ~dst :22) | ~b me", f)
 def test_eq(self):
     c = tflow.tserver_conn()
     c2 = c.copy()
     assert c == c
     assert c != c2
     assert c != 42
     assert hash(c) != hash(c2)
示例#6
0
 def test_eq(self):
     c = tflow.tserver_conn()
     c2 = c.copy()
     assert c == c
     assert c != c2
     assert c != 42
     assert hash(c) != hash(c2)
示例#7
0
    async def test_storage_flush_with_specials(self):
        s = self.start_session(fp=0.5)
        f = self.tft()
        s.request(f)
        await asyncio.sleep(1)
        assert len(s._hot_store) == 0
        f.response = http.HTTPResponse.wrap(tutils.tresp())
        s.response(f)
        assert len(s._hot_store) == 1
        assert s.load_storage() == [f]
        await asyncio.sleep(1)
        assert all([lflow.__dict__ == flow.__dict__ for lflow, flow in list(zip(s.load_storage(), [f]))])

        f.server_conn.via = tflow.tserver_conn()
        s.request(f)
        await asyncio.sleep(0.6)
        assert len(s._hot_store) == 0
        assert all([lflow.__dict__ == flow.__dict__ for lflow, flow in list(zip(s.load_storage(), [f]))])

        flows = [self.tft() for _ in range(500)]
        s.update(flows)
        await asyncio.sleep(0.6)
        assert s._flush_period == s._FP_DEFAULT * s._FP_DECREMENT
        await asyncio.sleep(3)
        assert s._flush_period == s._FP_DEFAULT
示例#8
0
 def test_or(self):
     f = self.flow()
     f.server_conn = tflow.tserver_conn()
     assert self.q("~b hello | ~b me", f)
     assert self.q("~src :22 | ~b me", f)
     assert not self.q("~src :99 | ~dst :99", f)
     assert self.q("(~src :22 | ~dst :22) | ~b me", f)
示例#9
0
    async def test_storage_flush_with_specials(self):
        s = self.start_session(fp=0.5)
        f = self.tft()
        s.request(f)
        await asyncio.sleep(1)
        assert len(s._hot_store) == 0
        f.response = http.HTTPResponse.wrap(tutils.tresp())
        s.response(f)
        assert len(s._hot_store) == 1
        assert s.load_storage() == [f]
        await asyncio.sleep(1)
        assert all([
            lflow.__dict__ == flow.__dict__
            for lflow, flow in list(zip(s.load_storage(), [f]))
        ])

        f.server_conn.via = tflow.tserver_conn()
        s.request(f)
        await asyncio.sleep(0.6)
        assert len(s._hot_store) == 0
        assert all([
            lflow.__dict__ == flow.__dict__
            for lflow, flow in list(zip(s.load_storage(), [f]))
        ])

        flows = [self.tft() for _ in range(500)]
        s.update(flows)
        await asyncio.sleep(0.6)
        assert s._flush_period == s._FP_DEFAULT * s._FP_DECREMENT
        await asyncio.sleep(3)
        assert s._flush_period == s._FP_DEFAULT
示例#10
0
 def test_tls_established_property(self):
     c = tflow.tserver_conn()
     c.tls_established = True
     assert c.tls_established
     assert c.tls_established
     c.tls_established = False
     assert not c.tls_established
     assert not c.tls_established
示例#11
0
 def test_dst(self):
     q = self.req()
     q.server_conn = tflow.tserver_conn()
     assert self.q("~dst address", q)
     assert not self.q("~dst foobar", q)
     assert self.q("~dst :22", q)
     assert not self.q("~dst :99", q)
     assert self.q("~dst address:22", q)
示例#12
0
 def test_repr(self):
     sc = tflow.tserver_conn()
     assert "address:22" in repr(sc)
     assert "ssl" not in repr(sc)
     sc.ssl_established = True
     assert "ssl" in repr(sc)
     sc.sni = "foo"
     assert "foo" in repr(sc)
示例#13
0
 def test_tls_established_property(self):
     c = tflow.tserver_conn()
     c.tls_established = True
     assert c.tls_established
     assert c.tls_established
     c.tls_established = False
     assert not c.tls_established
     assert not c.tls_established
示例#14
0
 def test_dst(self):
     q = self.req()
     q.server_conn = tflow.tserver_conn()
     assert self.q("~dst address", q)
     assert not self.q("~dst foobar", q)
     assert self.q("~dst :22", q)
     assert not self.q("~dst :99", q)
     assert self.q("~dst address:22", q)
示例#15
0
 def test_dst(self):
     f = self.flow()
     f.server_conn = tflow.tserver_conn()
     assert self.q("~dst address", f)
     assert not self.q("~dst foobar", f)
     assert self.q("~dst :22", f)
     assert not self.q("~dst :99", f)
     assert self.q("~dst address:22", f)
示例#16
0
 def test_and(self):
     f = self.flow()
     f.server_conn = tflow.tserver_conn()
     assert self.q("~b hello & ~b me", f)
     assert not self.q("~src wrongaddress & ~b hello", f)
     assert self.q("(~src :22 & ~dst :22) & ~b hello", f)
     assert not self.q("(~src address:22 & ~dst :22) & ~b nonexistent", f)
     assert not self.q("(~src address:22 & ~dst :99) & ~b hello", f)
示例#17
0
 def test_dst(self):
     f = self.flow()
     f.server_conn = tflow.tserver_conn()
     assert self.q("~dst address", f)
     assert not self.q("~dst foobar", f)
     assert self.q("~dst :22", f)
     assert not self.q("~dst :99", f)
     assert self.q("~dst address:22", f)
示例#18
0
 def test_repr(self):
     sc = tflow.tserver_conn()
     assert "address:22" in repr(sc)
     assert "ssl" not in repr(sc)
     sc.ssl_established = True
     assert "ssl" in repr(sc)
     sc.sni = "foo"
     assert "foo" in repr(sc)
示例#19
0
 def test_and(self):
     f = self.flow()
     f.server_conn = tflow.tserver_conn()
     assert self.q("~b hello & ~b me", f)
     assert not self.q("~src wrongaddress & ~b hello", f)
     assert self.q("(~src :22 & ~dst :22) & ~b hello", f)
     assert not self.q("(~src address:22 & ~dst :22) & ~b nonexistent", f)
     assert not self.q("(~src address:22 & ~dst :99) & ~b hello", f)
示例#20
0
 def test_send(self):
     c = tflow.tserver_conn()
     c.send(b'foobar')
     c.send([b'foo', b'bar'])
     with pytest.raises(TypeError):
         c.send('string')
     with pytest.raises(TypeError):
         c.send(['string', 'not'])
     assert c.wfile.getvalue() == b'foobarfoobar'
示例#21
0
 def test_send(self):
     c = tflow.tserver_conn()
     c.send(b'foobar')
     c.send([b'foo', b'bar'])
     with pytest.raises(TypeError):
         c.send('string')
     with pytest.raises(TypeError):
         c.send(['string', 'not'])
     assert c.wfile.getvalue() == b'foobarfoobar'
示例#22
0
 def test_roundtrip_server_cert(self, tdata):
     s = tflow.tserver_conn()
     del s.reply
     s.wfile = None
     s.rfile = None
     with open(tdata.path("mitmproxy/net/data/text_cert"), "rb") as f:
         d = f.read()
     s.cert = certs.Cert.from_pem(d)
     ps = protobuf._dump_http_server_conn(s)
     ls = protobuf._load_http_server_conn(ps)
     assert s.__dict__ == ls.__dict__
示例#23
0
 def test_roundtrip_server_cert(self, tdata):
     s = tflow.tserver_conn()
     del s.reply
     s.wfile = None
     s.rfile = None
     with open(tdata.path("mitmproxy/net/data/text_cert"), "rb") as f:
         d = f.read()
     s.cert = certs.Cert.from_pem(d)
     ps = protobuf._dump_http_server_conn(s)
     ls = protobuf._load_http_server_conn(ps)
     assert s.__dict__ == ls.__dict__
示例#24
0
def test_self_connect():
    server = tserver_conn()
    client = tclient_conn()
    server.address = ("localhost", 8080)
    ps = Proxyserver()
    with taddons.context(ps) as tctx:
        # not calling .running() here to avoid unnecessary socket
        ps.options = tctx.options
        ps.server_connect(server_hooks.ServerConnectionHookData(
            server, client))
        assert server.error == "Stopped mitmproxy from recursively connecting to itself."
示例#25
0
def test_self_connect():
    server = tserver_conn()
    client = tclient_conn()
    server.address = ("localhost", 8080)
    ps = Proxyserver()
    with taddons.context(ps) as tctx:
        # not calling .running() here to avoid unnecessary socket
        ps.options = tctx.options
        ps.server_connect(
            server_hooks.ServerConnectionHookData(server, client)
        )
        assert "Request destination unknown" in server.error
示例#26
0
    def test_filters(self):
        e = self.err()
        f = self.flow()
        f.server_conn = tflow.tserver_conn()

        assert self.q("~all", f)

        assert not self.q("~a", f)

        assert not self.q("~b whatever", f)
        assert not self.q("~bq whatever", f)
        assert not self.q("~bs whatever", f)

        assert not self.q("~c 0", f)

        assert not self.q("~d whatever", f)

        assert self.q("~dst address", f)
        assert not self.q("~dst nonexistent", f)

        assert self.q("~e", e)
        assert not self.q("~e", f)

        assert not self.q("~http", f)
        assert not self.q("~tcp", f)
        assert not self.q("~websocket", f)

        assert not self.q("~h whatever", f)
        assert not self.q("~hq whatever", f)
        assert not self.q("~hs whatever", f)

        assert not self.q("~m whatever", f)

        assert not self.q("~s", f)

        assert self.q("~src 127.0.0.1", f)
        assert not self.q("~src nonexistent", f)

        assert not self.q("~tcp", f)

        assert not self.q("~t whatever", f)
        assert not self.q("~tq whatever", f)
        assert not self.q("~ts whatever", f)

        assert not self.q("~u whatever", f)

        assert not self.q("~q", f)

        assert not self.q("~comment .", f)
        f.comment = "comment"
        assert self.q("~comment .", f)
示例#27
0
    def test_filters(self):
        e = self.err()
        f = self.flow()
        f.server_conn = tflow.tserver_conn()

        assert not self.q("~a", f)

        assert not self.q("~b whatever", f)
        assert not self.q("~bq whatever", f)
        assert not self.q("~bs whatever", f)

        assert not self.q("~c 0", f)

        assert not self.q("~d whatever", f)

        assert self.q("~dst address", f)
        assert not self.q("~dst nonexistent", f)

        assert self.q("~e", e)
        assert not self.q("~e", f)

        assert not self.q("~http", f)
        assert not self.q("~tcp", f)
        assert not self.q("~websocket", f)

        assert not self.q("~h whatever", f)
        assert not self.q("~hq whatever", f)
        assert not self.q("~hs whatever", f)

        assert not self.q("~m whatever", f)

        assert not self.q("~s", f)

        assert self.q("~src address", f)
        assert not self.q("~src nonexistent", f)

        assert not self.q("~tcp", f)

        assert not self.q("~t whatever", f)
        assert not self.q("~tq whatever", f)
        assert not self.q("~ts whatever", f)

        assert not self.q("~u whatever", f)

        assert not self.q("~q", f)
示例#28
0
    def test_repr(self):
        c = tflow.tserver_conn()

        c.sni = 'foobar'
        c.tls_established = True
        c.alpn_proto_negotiated = b'h2'
        assert 'address:22' in repr(c)
        assert 'ALPN' in repr(c)
        assert 'TLS: foobar' in repr(c)

        c.sni = None
        c.tls_established = True
        c.alpn_proto_negotiated = None
        assert 'ALPN' not in repr(c)
        assert 'TLS' in repr(c)

        c.sni = None
        c.tls_established = False
        assert 'TLS' not in repr(c)
示例#29
0
    def test_filters(self):
        e = self.err()
        f = self.flow()
        f.server_conn = tflow.tserver_conn()

        assert not self.q("~a", f)

        assert not self.q("~b whatever", f)
        assert not self.q("~bq whatever", f)
        assert not self.q("~bs whatever", f)

        assert not self.q("~c 0", f)

        assert not self.q("~d whatever", f)

        assert self.q("~dst address", f)
        assert not self.q("~dst nonexistent", f)

        assert self.q("~e", e)
        assert not self.q("~e", f)

        assert not self.q("~http", f)

        assert not self.q("~h whatever", f)
        assert not self.q("~hq whatever", f)
        assert not self.q("~hs whatever", f)

        assert not self.q("~m whatever", f)

        assert not self.q("~s", f)

        assert self.q("~src address", f)
        assert not self.q("~src nonexistent", f)

        assert not self.q("~tcp", f)

        assert not self.q("~t whatever", f)
        assert not self.q("~tq whatever", f)
        assert not self.q("~ts whatever", f)

        assert not self.q("~u whatever", f)

        assert not self.q("~q", f)
示例#30
0
    def test_repr(self):
        c = tflow.tserver_conn()

        c.sni = 'foobar'
        c.tls_established = True
        c.alpn_proto_negotiated = b'h2'
        assert 'address:22' in repr(c)
        assert 'ALPN' in repr(c)
        assert 'TLSv1.2: foobar' in repr(c)

        c.sni = None
        c.tls_established = True
        c.alpn_proto_negotiated = None
        assert 'ALPN' not in repr(c)
        assert 'TLS' in repr(c)

        c.sni = None
        c.tls_established = False
        assert 'TLS' not in repr(c)
示例#31
0
 def test_state(self):
     c = tflow.tserver_conn()
     c2 = c.copy()
     assert c2.get_state() != c.get_state()
     c.id = c2.id = "foo"
     assert c2.get_state() == c.get_state()
示例#32
0
 def test_state(self):
     c = tflow.tserver_conn()
     c2 = c.copy()
     assert c2.get_state() != c.get_state()
     c.id = c2.id = "foo"
     assert c2.get_state() == c.get_state()