Изменение TCP посередине и номер подтверждения

Для некоторых личных целей мне нужно дополнить HTTP-заголовок дополнительной информацией (которая будет обрабатываться приложением на стороне HTTP-сервера). Основная идея заключалась в том, чтобы изменить полученный пакет, отправить его по назначению и не заботиться об ответе. Очень упрощенная схема путей движения:

      +---+       +------+        +---+
|   +<<-----o MDFY +<<------o   |
| R |       +------+        | S |
| C |                       | N |
| V |                       | D |
|   o--------------------->>+   |
+---+                       +---+

Проблема связана с номерами TCP SEQ/ACK. После установления связи TCP Отправитель отправляет пакет длиной 4 байта, который поступает к Модификатору, где длина изменяется на 22, затем пакет поступает к Получателю и отправляет номер ACK +23, в то время как Отправитель ожидает +5. Это выводит отправителя из себя, и сессия становится несинхронизированной. Я это вижу, когда, например, пробую netcat для тестирования - для немодифицированных пакетов сессия закрывается сразу после обмена данными, а для модифицированных пакетов сессия долго устаревает (вообще, я останавливаю ее нажатием Ctrl-C).

Я не вижу простого способа справиться с этой ситуацией. Похоже, что после изменения посередине весь сеанс должен обрабатываться Модификатором, поскольку Отправитель ничего не знает об изменении Порядкового номера и будет полагаться на свои собственные числа. Это существенно повлияет на производительность и увеличит сложность, поскольку мне нужно поддерживать состояние каждого сеанса и изменять каждый пакет, поступающий с обеих сторон, для сохранения номеров SEQ/ACK.

Может быть, я не вижу другого пути, кроме написания собственного DPI? :-) Любые знания, идеи и предложения приветствуются.

Спасибо.

0 ответов

Другие вопросы по тегам