Architecture
Simple proxy ...with client TX observers:
#########################################################################
# #
# TCP client `tcp-clone` TCP server # Observer 0..N
# +------------+ +-------------+ +------------+ # +--------------+
# | | | | | | # | |--+
# | connect |----------->| accept | | | # | | |
# | | | connect |----------->| accept | # | | |
# | | | |\----------------------------------------->| accept | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | RX/TX | | client | | # | | |
# | RX, TX |<---------->| RX, TX | RX/TX | | # | | |
# | | | RX, TX |<---------->| RX, TX | # | | |
# | | | |\ client TX | | # | | |
# | | | | \---------------------------------------->| RX | |
# | | | | | | # observer TX | | |
# | | | dropped |<------------------------------------------| TX | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | disconnect |-----x----->| disconnect | | | # | | |
# | #1 | | disconnect |------x---->| | # | | |
# | | | |\ | | # | | |
# | | | | ------------------x---------------------->| disconnect | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | disconnect |<-----x-----| disconnect | # | | |
# | disconnect |<----x------| disconnect | | #2 | # | | |
# | | | disconnect |-------------------x---------------------->| disconnect | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | | | | # | | |
# | | | disconnect |<------------------x-----------------------| disconnect | |
# | | | | | | # | #3 | |
# +------------+ +-------------+ +------------+ # +--------------+ |
######################################################################### +----------------+
Installation
From source
With cargo installed run:
Pre-builds
Download a released version.
Usage
Configuration file
Example
[[]]
[]
= "127.0.0.1:1202"
[]
= "127.0.0.1:5000"
[[]]
= "127.0.0.1:6000"
[[]]
= "127.0.0.1:7000"
# Add more servers:
#
#[[tcp_clone]]
#
# [tcp_clone.server]
# listen_addr = "127.0.0.1:1111"
#
# [tcp_clone.target]
# addr = "127.0.0.1:3333"
#
# [[tcp_clone.observer]]
# addr = "127.0.0.1:5555"
Demo
With iperf
With netcat