polosat Опубликовано 1 мая, 2009 Жалоба Поделиться Опубликовано 1 мая, 2009 Имеется такая задача, не знаю как решить: Некая программа шлёт TCP запросы на сервер. Ответа от сервера она не ждёт. Необходимо ловить эти запросы на сервере, и в неизменном виде передавать на два других других сервера. Пытаюсь копать в сторону netcat и nettee, но пока не соображу, как это сделать, и возможно ли в принципе. Подскажите, как это можно сделать? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
gogi Опубликовано 1 мая, 2009 Жалоба Поделиться Опубликовано 1 мая, 2009 polosat писал(а) Fri, 01 May 2009 20:37 Имеется такая задача, не знаю как решить: Некая программа шлёт TCP запросы на сервер. Ответа от сервера она не ждёт. Необходимо ловить эти запросы на сервере, и в неизменном виде передавать на два других других сервера. Пытаюсь копать в сторону netcat и nettee, но пока не соображу, как это сделать, и возможно ли в принципе. Подскажите, как это можно сделать? Попробуйте переформулировать задачу с точки зрения пользователя. Я так и не понял, чего и для какой цели вы добиваетесь. Протокол tcp нацелен на соединения, и если программа инициирует соединение с сервером, что значит Цитата: Ответа от сервера она не ждёт ??? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
polosat Опубликовано 1 мая, 2009 Автор Жалоба Поделиться Опубликовано 1 мая, 2009 Да, наверное я некорректно сформулировал вопрос. Как есть сейчас: На машине "A" есть клиент, который по TCP периодически отправляет серверу "B" некоторую последовательность символов на определённый порт. Сервер принимает эту последовательность, и обрабатывает её. Мне же нужно чтобы: - на машине "B" крутился скрипт, который будет перенаправлять полученные данные на машины "C" и "D" - А вот уже на "С" и "D" будут работать сервера, обрабатывающие полученные данные. Вопрос. Как в таком случае написать скрипт для "B", который будет передавать полученные данные и на "C", и на "D"? Ну, и ещё желательно, чтобы на "B" все проходящие через него данные логгировались в файл. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Ineu Опубликовано 1 мая, 2009 Жалоба Поделиться Опубликовано 1 мая, 2009 Зачем скрипт? Реализуйте перенаправление через iptables Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
polosat Опубликовано 1 мая, 2009 Автор Жалоба Поделиться Опубликовано 1 мая, 2009 EvilShadow писал(а) Fri, 01 May 2009 22:44 Зачем скрипт? Реализуйте перенаправление через iptables Это было бы здорово! Но как с помощью iptables сделать так, чтобы полученные пакеты сразу перенаправлялись на два сервера одновременно? Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
polosat Опубликовано 1 мая, 2009 Автор Жалоба Поделиться Опубликовано 1 мая, 2009 В общем, у меня получилось что-то вроде такого: nc -l -p 1200 | tee >(nc -q0 hostC.com 1200)|(nc -q0 hostD.com 1200) Вроде бы работает. Но как-то мне это кажется кривоватым Да и запускать это всё, кажется, надо в цикле, т.к. если клиент, передающий данные отваливается, то и слушающий nc тоже завершается. А мне надо, чтобы этот скрипт постоянно слушал нужный порт. В общем, если бы это можно было сделать через iptables было бы здорово. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
gogi Опубликовано 1 мая, 2009 Жалоба Поделиться Опубликовано 1 мая, 2009 polosat писал(а) Fri, 01 May 2009 23:12 В общем, у меня получилось что-то вроде такого: nc -l -p 1200 | tee >(nc -q0 hostC.com 1200)|(nc -q0 hostD.com 1200) Вроде бы работает. Но как-то мне это кажется кривоватым Да и запускать это всё, кажется, надо в цикле, т.к. если клиент, передающий данные отваливается, то и слушающий nc тоже завершается. А мне надо, чтобы этот скрипт постоянно слушал нужный порт. В общем, если бы это можно было сделать через iptables было бы здорово. 1. Если я правильно понял задачу, то в этом случает лучше использовать UDP, или TCP - уже данная реальность. 2. Насколько я помню, iptables не умеет дублировать пакеты. 3. Ваше решение я бы немного подкорректировал. Можно написать скрипт и зарегистрировать его в inetd (в самом простом случае) на прослушивание 1200 порта (tcp или udp) и в этом скрипте вызывать tee (nc...). Только в любом случае, разумеется, пакеты на C и D будут поступать от сервера B и в случае tcp пакеты, устанавливающие соединение, очевидно, передаваться не будут. В случае tcp также надо больше знать о протоколе прикладного уровня, чтобы грамотно устанавливать и разрывать соединения. Все же, если tcp незаменим, я советую поискать более простое решение. PS. Правка на всякий случай. Думаю, вы и так поняли. Пакеты, устанавливающие соединение, передаваться не будут через этот скрипт. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
polosat Опубликовано 2 мая, 2009 Автор Жалоба Поделиться Опубликовано 2 мая, 2009 gogi, спасибо! C inetd всё заработало стабильно. Решение получилось гораздо более красивое, чем крутить netcat'а в цикле. TCP - это действительно данность, но на конечном результате, к счастью, это не сказывается Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.