2014-11-24 2 views
0

В настоящее время я пишу приложение Java, в котором я запускаю основной раздел вместе с резервным (с использованием виртуальных машин). Чтобы заставить сервер резервного копирования взять на себя первичный (если первичные аварии), будучи полностью прозрачным для клиента, мне нужно получить одно и то же приложение, работающее как на первичной, так и на резервной, и оба должны иметь одно и то же состояние.Изменение TCP-пакетов «на лету»

Для этого мне нужно синхронизировать резервное копирование с основным, чтобы он получал одну и ту же последовательность пакетов от клиента и отправлял те же (подавленные) ответы. Для этого мне нужно, чтобы начальный порядковый номер TCP резервной копии совпал с начальным порядковым номером первичного.

Чтобы достичь этого, я подумал о перехвате пакетов на резервный сервер и обратно, а также изменении номера последовательности в их заголовке TCP, чтобы он соответствовал параметрам первичного. Таким образом, мне нужно приложение, -

  • позволяет мне перехват TCP-пакеты на лету
  • позволяет мне изменить их, а затем направить их в первоначальное место назначения
  • Обеспечивает оригинальный неизмененный пакет отбрасывается
  • Что-то, что может быть встроено в приложения Java, является огромным плюсом, но это не является основным требованием.

Есть ли способ достичь этого?

+0

Вы не можете сделать это на Java с любым известным мне пакетом. Каждый будет предлагать JPcap, но это только позволяет захватывать пакеты, а не изменять их. – EJP

+0

@ EJP А это, к сожалению, есть пакет для другого языка, о котором вы знаете, что будет делать эту работу? Я могу использовать что-то другое, кроме Java, если это необходимо. –

+0

Есть библиотека C, чье имя я забываю, кто это делает. Порты доступны для большинства основных операционных систем. Я думаю, что это может быть проект «LibNet», упомянутый здесь (http://www.tcpdump.org/related.html). Несколько лет назад я немного поработал над JPcap, и я думаю, что именно там я это заметил. – EJP

ответ

0

Для тех, кто сталкивается с той же проблемой, я наконец-то удалось это сделать с помощью Ettercap - http://ettercap.github.io/ettercap/

Более конкретно, я использовал режим отравления ARP для перехвата пакетов и с сервера и использовать пользовательский Ettercap плагин соответствующим образом изменить их.