Пример #1
0
def test_socks5_premature_close(tctx: Context):
    assert (
        Playbook(modes.Socks5Proxy(tctx), logs=True)
        >> DataReceived(tctx.client, b"\x05")
        >> ConnectionClosed(tctx.client)
        << Log(r"Client closed connection before completing SOCKS5 handshake: b'\x05'")
        << CloseConnection(tctx.client)
    )
Пример #2
0
def test_socks5_err(data: bytes, err: bytes, msg: str, tctx: Context):
    playbook = (Playbook(modes.Socks5Proxy(tctx), logs=True) >> DataReceived(
        tctx.client, data))
    if err:
        playbook << SendData(tctx.client, err)
    playbook << CloseConnection(tctx.client)
    playbook << Log(msg)
    assert playbook
Пример #3
0
def test_socks5_trickle(tctx: Context):
    tctx.options.connection_strategy = "lazy"
    playbook = Playbook(modes.Socks5Proxy(tctx))
    for x in CLIENT_HELLO:
        playbook >> DataReceived(tctx.client, bytes([x]))
    playbook << SendData(tctx.client, b"\x05\x00")
    for x in b"\x05\x01\x00\x01\x7f\x00\x00\x01\x12\x34":
        playbook >> DataReceived(tctx.client, bytes([x]))
    assert playbook << SendData(tctx.client, b"\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00")
Пример #4
0
def test_socks5_eager_err(tctx: Context):
    tctx.options.connection_strategy = "eager"
    server = Placeholder(Server)
    assert (Playbook(modes.Socks5Proxy(tctx)) >> DataReceived(
        tctx.client, CLIENT_HELLO) << SendData(
            tctx.client, SERVER_HELLO) >> DataReceived(
                tctx.client, b"\x05\x01\x00\x01\x7f\x00\x00\x01\x12\x34") <<
            OpenConnection(server) >> reply("out of socks") << SendData(
                tctx.client, b"\x05\x04\x00\x01\x00\x00\x00\x00\x00\x00") <<
            CloseConnection(tctx.client))
Пример #5
0
def test_socks5_success(address: str, packed: bytes, tctx: Context):
    tctx.options.connection_strategy = "eager"
    playbook = Playbook(modes.Socks5Proxy(tctx))
    server = Placeholder(Server)
    nextlayer = Placeholder(NextLayer)
    assert (playbook >> DataReceived(tctx.client, CLIENT_HELLO) << SendData(
        tctx.client, SERVER_HELLO) >> DataReceived(
            tctx.client, b"\x05\x01\x00" + packed + b"\x12\x34applicationdata")
            << OpenConnection(server) >> reply(None) << SendData(
                tctx.client, b"\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00") <<
            NextLayerHook(nextlayer))
    assert server().address == (address, 0x1234)
    assert nextlayer().data_client() == b"applicationdata"
Пример #6
0
def test_socks5_trickle(tctx: Context):
    ProxyAuth().load(tctx.options)
    tctx.options.proxyauth = "user:password"
    tctx.options.connection_strategy = "lazy"
    playbook = Playbook(modes.Socks5Proxy(tctx))
    for x in b"\x05\x01\x02":
        playbook >> DataReceived(tctx.client, bytes([x]))
    playbook << SendData(tctx.client, b"\x05\x02")
    for x in b"\x01\x04user\x08password":
        playbook >> DataReceived(tctx.client, bytes([x]))
    playbook << modes.Socks5AuthHook(Placeholder())
    playbook >> reply(side_effect=_valid_socks_auth)
    playbook << SendData(tctx.client, b"\x01\x00")
    for x in b"\x05\x01\x00\x01\x7f\x00\x00\x01\x12\x34":
        playbook >> DataReceived(tctx.client, bytes([x]))
    assert playbook << SendData(tctx.client,
                                b"\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00")
Пример #7
0
def test_socks5_auth_fail(client_greeting: bytes, server_choice: bytes,
                          client_auth: bytes, err: bytes, msg: str,
                          tctx: Context):
    ProxyAuth().load(tctx.options)
    tctx.options.proxyauth = "user:password"
    playbook = (Playbook(modes.Socks5Proxy(tctx), logs=True) >> DataReceived(
        tctx.client, client_greeting))
    if server_choice is None:
        playbook << SendData(tctx.client, err)
    else:
        playbook << SendData(tctx.client, server_choice)
        playbook >> DataReceived(tctx.client, client_auth)
        playbook << modes.Socks5AuthHook(Placeholder(modes.Socks5AuthData))
        playbook >> reply()
        playbook << SendData(tctx.client, err)

    playbook << CloseConnection(tctx.client)
    playbook << Log(msg)
    assert playbook
Пример #8
0
def test_socks5_auth_success(client_greeting: bytes, server_choice: bytes,
                             client_auth: bytes, server_resp: bytes,
                             address: bytes, packed: bytes, tctx: Context):
    ProxyAuth().load(tctx.options)
    tctx.options.proxyauth = "user:password"
    server = Placeholder(Server)
    nextlayer = Placeholder(NextLayer)
    playbook = (Playbook(modes.Socks5Proxy(tctx), logs=True) >> DataReceived(
        tctx.client, client_greeting) << SendData(tctx.client, server_choice)
                >> DataReceived(tctx.client, client_auth) <<
                modes.Socks5AuthHook(Placeholder(modes.Socks5AuthData)) >>
                reply(side_effect=_valid_socks_auth) << SendData(
                    tctx.client, server_resp) >> DataReceived(
                        tctx.client,
                        b"\x05\x01\x00" + packed + b"\x12\x34applicationdata")
                << OpenConnection(server) >> reply(None) << SendData(
                    tctx.client, b"\x05\x00\x00\x01\x00\x00\x00\x00\x00\x00")
                << NextLayerHook(nextlayer))
    assert playbook
    assert server().address == (address, 0x1234)
    assert nextlayer().data_client() == b"applicationdata"