Как собрать сегмент TCP? - PullRequest
       29

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

5 голосов
/ 14 февраля 2010

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

как собрать эти сегменты TCP? .. Есть ли идеи, предложения или учебные пособия? ..

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

спасибо! ..

Ответы [ 5 ]

7 голосов
/ 14 февраля 2010

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

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

5 голосов
/ 15 февраля 2010

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

длина части данных в сегменте 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. ты в порядке!

3 голосов
/ 24 июня 2017

PcapPlusPlus предлагает эту возможность "из коробки" для всех основных ОС (включая Windows). Посмотрите пример TcpReassembly , чтобы увидеть рабочий код и документацию API, чтобы понять, как использовать функцию повторной сборки TCP

2 голосов
/ 08 марта 2010

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

0 голосов
/ 07 июня 2017

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

...