Перейти к содержанию

Как распараллелить tcp запросы?


Рекомендуемые сообщения

Имеется такая задача, не знаю как решить:

Некая программа шлёт TCP запросы на сервер. Ответа от сервера она не ждёт. Необходимо ловить эти запросы на сервере, и в неизменном виде передавать на два других других сервера. Пытаюсь копать в сторону netcat и nettee, но пока не соображу, как это сделать, и возможно ли в принципе.

Подскажите, как это можно сделать?

Ссылка на комментарий
Поделиться на другие сайты

polosat писал(а) Fri, 01 May 2009 20:37

Имеется такая задача, не знаю как решить:

Некая программа шлёт TCP запросы на сервер. Ответа от сервера она не ждёт. Необходимо ловить эти запросы на сервере, и в неизменном виде передавать на два других других сервера. Пытаюсь копать в сторону netcat и nettee, но пока не соображу, как это сделать, и возможно ли в принципе.

Подскажите, как это можно сделать?

Попробуйте переформулировать задачу с точки зрения пользователя. Я так и не понял, чего и для какой цели вы добиваетесь. Протокол tcp нацелен на соединения, и если программа инициирует соединение с сервером, что значит

Цитата:

Ответа от сервера она не ждёт

???

Ссылка на комментарий
Поделиться на другие сайты

Да, наверное я некорректно сформулировал вопрос. Sad

Как есть сейчас:

На машине "A" есть клиент, который по TCP периодически отправляет серверу "B" некоторую последовательность символов на определённый порт. Сервер принимает эту последовательность, и обрабатывает её.

Мне же нужно чтобы:

- на машине "B" крутился скрипт, который будет перенаправлять полученные данные на машины "C" и "D"

- А вот уже на "С" и "D" будут работать сервера, обрабатывающие полученные данные.

Вопрос. Как в таком случае написать скрипт для "B", который будет передавать полученные данные и на "C", и на "D"?

Ну, и ещё желательно, чтобы на "B" все проходящие через него данные логгировались в файл.

Ссылка на комментарий
Поделиться на другие сайты

EvilShadow писал(а) Fri, 01 May 2009 22:44

Зачем скрипт? Реализуйте перенаправление через iptables

Это было бы здорово!

Но как с помощью iptables сделать так, чтобы полученные пакеты сразу перенаправлялись на два сервера одновременно?

Ссылка на комментарий
Поделиться на другие сайты

В общем, у меня получилось что-то вроде такого:

nc -l -p 1200 | tee >(nc -q0 hostC.com 1200)|(nc -q0 hostD.com 1200)

Вроде бы работает. Но как-то мне это кажется кривоватым Sad

Да и запускать это всё, кажется, надо в цикле, т.к. если клиент, передающий данные отваливается, то и слушающий nc тоже завершается. А мне надо, чтобы этот скрипт постоянно слушал нужный порт.

В общем, если бы это можно было сделать через iptables было бы здорово.

Ссылка на комментарий
Поделиться на другие сайты

polosat писал(а) Fri, 01 May 2009 23:12

В общем, у меня получилось что-то вроде такого:

nc -l -p 1200 | tee >(nc -q0 hostC.com 1200)|(nc -q0 hostD.com 1200)

Вроде бы работает. Но как-то мне это кажется кривоватым Sad

Да и запускать это всё, кажется, надо в цикле, т.к. если клиент, передающий данные отваливается, то и слушающий nc тоже завершается. А мне надо, чтобы этот скрипт постоянно слушал нужный порт.

В общем, если бы это можно было сделать через iptables было бы здорово.

1. Если я правильно понял задачу, то в этом случает лучше использовать UDP, или TCP - уже данная реальность.

2. Насколько я помню, iptables не умеет дублировать пакеты.

3. Ваше решение я бы немного подкорректировал.

Можно написать скрипт и зарегистрировать его в inetd (в самом простом случае) на прослушивание 1200 порта (tcp или udp) и в этом скрипте вызывать

tee (nc...).

Только в любом случае, разумеется, пакеты на C и D будут поступать от сервера B и в случае tcp пакеты, устанавливающие соединение, очевидно, передаваться не будут. В случае tcp также надо больше знать о протоколе прикладного уровня, чтобы грамотно устанавливать и разрывать соединения.

Все же, если tcp незаменим, я советую поискать более простое решение.

PS. Правка на всякий случай. Думаю, вы и так поняли.

Пакеты, устанавливающие соединение, передаваться не будут через этот скрипт.

Ссылка на комментарий
Поделиться на другие сайты

gogi, спасибо! C inetd всё заработало стабильно. Решение получилось гораздо более красивое, чем крутить netcat'а в цикле.

TCP - это действительно данность, но на конечном результате, к счастью, это не сказывается Smile

Ссылка на комментарий
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...