我必须测试一个自制服务器,该服务器在单个端口上接受大量传入 TCP 流量。协议也是自制的。
为了测试目的,我想将此流量发送到: - 生产服务器(例如,监听端口 12345) - 测试服务器(例如,监听端口 23456)
我的客户端应用程序很“笨”:它们从不读回数据,服务器也从不回复,我的服务器只接受连接,进行统计计算并存储/转发/服务原始数据和计算数据。
实际上,客户端应用程序和硬件非常简单,我无法告诉客户端在两个服务器上发送他们的流......并且使用“假”客户端是不够的。
最简单的解决方案是什么?我当然可以编写一个中介应用程序,只复制传入的数据并将其发送回测试服务器,假装是客户端。
我有一台运行 Squeeze 的服务器并且对它拥有完全的控制权。
提前感谢您的回复。
答案1
如果您不想写任何东西,也许 netcat 会监听一个端口,通过管道连接到 tee,然后 tee 会转到几个命名管道,然后这些管道又会连接到生产和测试服务器端口?
就像是:
mkfifo /tmp/prodpipe
mkfifo /tmp/testpipe
nc -l 9999 -k | tee /tmp/prodpipe | tee /tmp/testpipe
并且,在单独的终端中:
cat /tmp/prodpipe | nc 127.0.0.1 12345
和
cat /tmp/testpipe | nc 127.0.0.1 23456
然后你的客户端在端口 9999 上进行喷发。
答案2
如果您的流量是 UDP,那么使用 iptables 应该很容易做到。
iptables 的目标TEE
可用,基本上允许您将数据包的副本发送到不同的目的地。
它不是默认内置在内核中的,但是源代码和工具可以在xtables-插件源包裹。