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. ты в порядке!