Назад | Перейти на главную страницу

Дублирование входящего TCP-трафика в Debian Squeeze

Мне нужно протестировать самодельный сервер, который принимает много входящего 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 пакет.