Изменение пакетов tcp / ip c ++ или java - PullRequest
2 голосов
/ 09 февраля 2012

Вот ситуация.В сети есть сервер и клиент.Они общаются так:

  1. Клиент отправляет запрос на какую-либо функцию.
  2. Сервер отправляет клиенту параметры функции.
  3. Клиент пытается выполнить функцию и отправляет ответ на сервер.
  4. Сервер отправляет клиенту данные, которые он должен показать.

Но иногда клиент не может выполнить функцию и отправляет ошибку.Я хочу перехватить все пакеты из шага 2, проанализировать их (у меня уже есть инструменты для этого), не допустить, чтобы некоторые из них достигли клиента, обработать их с моей программой и сформировать пакет, как в шаге 3. Это должно быть сделано на клиентебоковая сторона.У меня нет доступа ни к серверу, ни к клиенту.

Итак, вопрос: есть ли библиотеки для изменения, внедрения и удаления пакета tcp / ip в c ++ или java?Решение должно работать в системах Win и Linux.Кроме того, может быть, у вас есть лучшие идеи по расширению функциональности клиента?

Спасибо за любую помощь!Я пытался гуглить, как менять пакеты, но все, что я получил, были оставленные без ответа вопросы и снифферы = (

Редактировать: На самом деле, мне действительно не нужно вводить и удалять пакеты, я могу управлять этим только с изменением данных пакетаКроме того, в одном пакете нет нескольких запросов, и один запрос к нескольким пакетам не является проблемой.

Ответы [ 2 ]

3 голосов
/ 09 февраля 2012

Вы должны построить прокси для своего сервера. Клиент подключается к прокси, а сам прокси подключается к серверу. Он просто маршрутизирует все пакеты между клиентом и сервером.

НО теперь он может перехватывать определенные сообщения и изменять их. Представьте себе фильтрующий HTTP-прокси, он работает так же.

1 голос
/ 06 июля 2013

У меня есть личный опыт работы с libpcap на linux и freeBSD, разновидностью низкоуровневой библиотеки, которая помогает перехватывать или вводить пакеты.Я использовал его в проекте сетевого моста IPV6 ... Но я знаю, что для него есть порт Windows.http://sourceforge.net/projects/libpcap/ Вы можете разрешить библиотеке:

  1. перехватывать пакеты с помощью фильтра
  2. извлекать данные из пакета
  3. вы можете обрабатывать данные (изменитьих)
  4. повторно внедрите его, используя ту же библиотеку

Но вам придется работать с внутренними данными в довольно сыром виде.Лучшая документация для этой библиотеки - это комментарии внутри ее заголовочного файла, то есть самая свежая информация.Может быть, есть более удобные библиотеки высокого уровня.

...