#tcp-server #proxy-server #observer #tcp-client #up #send #ability

bin+lib tcp-clone

具有将客户端向上和/或向下发送到观察者的能力的 TCP 代理服务器

1 个不稳定版本

0.99.4 2019年11月24日
0.99.3 2019年11月23日
0.99.2 2019年11月23日

#14#能力

MIT 许可证

20KB
264

tcp-clone

具有将客户端向上和/或向下发送到观察者的能力的 TCP 代理服务器。

架构

                               Simple proxy               ...with client up- and/or downstream observer(s):
                                                                                                           
##########################################################################                                 
#                                                                        #                                 
#                                (Proxy)                     Target      #                 Observer 0..N   
#    TCP client                `tcp-clone`                (TCP server)   #                (TCP server(s))  
#  +------------+            +-------------+             +------------+  #              +--------------+   
#  |            |            |             |             |            |  #              |              |--+
#  |    connect |----------->| accept      |             |            |  #              |              |  |
#  |         #1 |            |     connect |------------>| accept     |  #              |              |  |
#  |            |            |             |\------------------------------------------>| accept       |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |    connect |----------->| accept      |             |            |  #              |              |  |
#  |         #2 |            |     connect |------x----->|            |  #              |              |  |
#  | disconnect |<----x------| disconnect  |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             | full proxy  |            |  #              |              |  |
#  |            |            |             | (TX and RX) |            |  #              |              |  |
#  |      TX/RX |<---------->| TX/RX TX/RX |<----------->| TX/RX      |  #              |              |  |
#  |            |            |             |\ half proxy |            |  #              |              |  |
#  |            |            |             | \(TX or RX) |            |  #              |              |  |
#  |            |            |             |  \---------------------------------------->| RX           |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |     dropped |<-------------------------------------------| TX           |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  | disconnect |-----x----->| disconnect  |             |            |  #              |              |  |
#  |         #1 |            |  disconnect |------x----->|            |  #              |              |  |
#  |            |            |             |\            |            |  #              |              |  |
#  |            |            |             | -------------------x---------------------->| disconnect   |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |  disconnect |<-----x------| disconnect |  #              |              |  |
#  | disconnect |<----x------| disconnect  |             | #2         |  #              |              |  |
#  |            |            |  disconnect |--------------------x---------------------->| disconnect   |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |             |             |            |  #              |              |  |
#  |            |            |  disconnect |<-------------------x-----------------------| disconnect   |  |
#  |            |            |             |             |            |  #              | #3           |  |
#  +------------+            +-------------+             +------------+  #              +--------------+  |
##########################################################################               +----------------+

安装

从源代码安装

已安装 cargo 运行

$ cargo install tcp-clone

预构建版本

下载一个 发布版本

用法

$ tcp-clone --help

配置文件

示例

[[tcp_clone]]

  [tcp_clone.server]
  listen_addr = "127.0.0.1:1202"

  [tcp_clone.target]
  addr = "127.0.0.1:5000"

  [[tcp_clone.client_tx_observer]]
  addr = "127.0.0.1:6000"

  [[tcp_clone.client_tx_observer]]
  addr = "127.0.0.1:7000"

  [[tcp_clone.client_rx_observer]]
  addr = "127.0.0.1:8000"

# Multiple servers:
#
#[[tcp_clone]]
#
#  [tcp_clone.server]
#  listen_addr = "127.0.0.1:1111"
#
#  [tcp_clone.target]
#  addr = "127.0.0.1:3333"
#
#  [[tcp_clone.client_tx_observer]]
#  addr = "127.0.0.1:5555"

演示

使用 iperf

$ tcp-clone --config tcp-clone.toml      # `tcp-clone` server
$ iperf -s -p 5000 -b 800Mbits/sec       # Target server
$ iperf -s -p 6000 -b 1Gbytes/sec        # Observer #1
$ iperf -s -p 7000 -b 500Mbits/sec       # Observer #2
$ iperf -c 127.0.0.1 -p 1202 -n 250Mbytes -P 4

使用 netcat

$ tcp-clone --config tcp-clone.toml
$ nc -l -p 5000
$ nc -l -p 6000
$ nc -l -p 7000
$ nc -l -p 8000
$ nc 127.0.0.1 1202
$ # ...and now type into the netcat instances...

许可证

本项目采用 MIT 许可证
版权所有 © 2019 Bence SZIGETI <[email protected]>

依赖项

~6–19MB
~222K SLoC