как повторно собрать сегмент TCP?

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

как повторно собрать этот TCP segements?.. какие-либо идеи, предложение или доступные учебные руководства?..

это, которое я принимаю, чтобы быть единственным способом, которым я могу просмотреть HTTP-заголовок...

спасибо!..

5
задан jerams 14 February 2010 в 02:25
поделиться

3 ответа

tcp - это протокол потока байтов. Последовательность байтов, отправляемая вашим http-приложением, инкапсулируется в сегменты данных tcp, и поток байтов воссоздается, прежде чем данные будут доставлены приложению на другой стороне. Поскольку вы получаете доступ к сегментам данных tcp с помощью winpcap, вам нужно перейти к части данных сегмента. заголовок tcp имеет фиксированную длину 20 байт + дополнительная часть, которую вам нужно определить с помощью winpcap api.

длина части данных в сегменте tcp определяется путем вычитания длины заголовка tcp (полученной из поля в сегменте tcp) и длины заголовка ip (из поля в датаграмме ip, инкапсулирующей сегмент tcp) из общей длины (полученной из другого поля в датаграмме ip).

теперь у вас есть общая длина сегмента и длина части данных в сегменте. таким образом, вы знаете смещение, с которого начинаются данные http-запроса.

смещение -

total length-length of data part
or
length of ip-header + length of tcp header

Я не использовал winpcap, поэтому вам придется выяснить, как получить эти поля с помощью api.

также ip датаграммы могут быть дополнительно фрагментированы, но я ожидаю, что вам предоставят только собранные датаграммы, используя этот api. вы готовы!

6
ответ дан 18 December 2019 в 09:07
поделиться

Не существует такого понятия, как фрагмент TCP. Протокол IP имеет фрагменты. TCP - это потоковый протокол. Вы можете собрать поток в предполагаемом порядке, следуя порядковым номерам с обеих сторон. Каждый TCP-пакет переходит на уровень IP и может быть там фрагментирован. Вы можете собрать каждый пакет, собрав все фрагменты и следуя смещению фрагмента из заголовка.
Вся необходимая информация находится в заголовках. Статьи в Википедии весьма полезны для объяснения того, что представляет собой каждое поле

http://en.wikipedia.org/wiki/TCP_header#Packet_structure
http://en.wikipedia.org/wiki/IPv4#Header

7
ответ дан 18 December 2019 в 09:07
поделиться

В зависимости от того, чей трафик вы пытаетесь пассивно собрать, вы можете столкнуться с некоторыми техниками обфускации TCP, призванными запутать людей, пытающихся сделать именно то, что пытаетесь сделать вы. Посмотрите эту статью о различных моделях поведения пересборки в операционных системах.

2
ответ дан 18 December 2019 в 09:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: