Мне нужно протестировать самодельный сервер, который принимает много входящего TCP-трафика на один порт. Протокол тоже доморощенный.
В целях тестирования я хотел бы отправить этот трафик на оба: - на производственный сервер (скажем, прослушивание порта 12345) - на тестовый сервер (например, прослушивание порта 23456)
Мои клиентские приложения «тупые»: они никогда не считывают данные обратно, и сервер все равно не отвечает, мой сервер принимает только соединения, выполняет статистические вычисления и сохраняет / пересылает / обслуживает как необработанные, так и вычисленные данные.
На самом деле, клиентские приложения и оборудование настолько просты, что я никак не могу сказать клиентам отправлять поток на оба сервера ... А использование «поддельных» клиентов недостаточно.
Какое может быть самое простое решение? Конечно, я могу написать промежуточное приложение, которое просто копирует входящие данные и отправляет их обратно на тестовый сервер, притворяясь клиентом.
У меня есть единственный сервер, на котором работает Squeeze, и я полностью контролирую его.
Заранее благодарим за ответы.
Если вы не хотите ничего писать, возможно, netcat прослушивает один порт, соединяет трубопровод с тройником и тройник идет на пару именованных каналов, которые, в свою очередь, являются netcat на порты prod и тестового сервера?
Что-то вроде:
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.
Если ваш трафик - UDP, это довольно просто сделать с помощью iptables.
А TEE
target для iptables, что в основном позволяет вам отправлять копию пакета в другое место назначения.
По умолчанию он не встроен в ядро, но исходный код и инструменты доступны в xtables-addons-source пакет.