Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > C/C++: Программирование под Unix/Linux > Как организована сетевая модель в Linux? |
Автор: KaraKum 28.7.2009, 16:21 |
Доброе время суток. Опишу задачу: Есть сервер и два приложения (a и b), запущенные на разных компах. Приложение a подключено к серверу, приложение b нет. Нужно все пакеты, отправляемые из сервера приложению a, продублировать (отправить повторно) от компа, на котором запущено приложение a, компу, на котором запущено приложение b. То есть для приложения b создать иллюзию того, что с ним общается сервер (но на самом деле сервер общается с приложением a). Как можно это осуществить (в Linuxe, соответственно)? Приложения на основе сокетов писал, но они здесь, как я понял, не помогут. P.S. Вообще хотелось бы найти литературу по поводу организации этой сетевой модели в Linux'e. Узнать как можно сканировать входящие и исходящие пакеты?. Как можно установить определённый адрес получателя (отправителя) или как вообще вручную (без сокетов) формировать пакеты? |
Автор: MAKCim 28.7.2009, 18:09 |
в одной локалке сервер и клиенты находятся? |
Автор: KaraKum 29.7.2009, 00:01 |
Нет - сервер и клиент (комп с приложением a) находятся по разные стороны интернета. В одной локалке будут компы с приложениями a и b - то есть комп с приложением a должен будет передавать по локалке (дублировать) все пакеты компу с приложением b, получаемые от сервера через www. При этом эти пакеты должны "выглядеть" для приложения b так, якобы они предназначались именно для него (а не для приложения a - как в действительности). Хотелось бы, помимо ответа, узнать литературу, описывающую вообще всю эту модель (организацию портов, пакетов и так далее) или хотя бы знать название этой "науки", чтобы знать с чего начать искать. P.S. "raw sockets" - правильное направление поиска?. |
Автор: InvalidProperty 29.7.2009, 08:32 |
нет. читай литературу "Стивенс_UNIX_Разработка сетевых приложений". Ее легко можно найти в сети - классная книга. Кто будет инициировать работу с сервером? Приложение b? Оно якобы запрашивает соединения с сервером, а на самом деле траф идет через a или как? Если так, то почему бы просто порт на a не прокинуть к серверу? |
Автор: KaraKum 29.7.2009, 09:27 | ||
Немного не так - соединяться с сервером должно приложение a. Комп, на котором запущено это приложение a, должен все пакеты, посылаемые сервером приложению a, дублировать на комп (уже по локальной сети) с приложением b, при этом приложение b должно "думать", что все эти дублированные пакеты предназначаются именно для него. То есть пакеты, посылаемые сервером приложению a, должны доходить И до a, И до b. P.S. Программы скомпилированы не мною и исходников нету, поэтому вручную на сокетах продублировать пакеты нельзя. |
Автор: Pointer 29.7.2009, 09:56 |
Попробуй iptables. Что-то типа такого. iptables -t nat -A POSTROUTING -p tcp -d SERVER_ADR --dport PORT_A -j SNAT --to-source IP_B |
Автор: KaraKum 29.7.2009, 11:05 | ||
Спасибо за совет, но проблему "замены заголовка отправителя" это не решает. Нашёл библиотеку libpcap (http://yuba.stanford.edu/~casado/pcap/section1.html) - похоже она решает проблему. |