TCP to protokół strumień bajtów. sekwencja bajtów wysłanych przez twoją aplikację http jest hermetyzowana w segmentach danych tcp, a strumień bajtów jest odtwarzany, zanim dane zostaną dostarczone do aplikacji po drugiej stronie. ponieważ uzyskujesz dostęp do zbioru danych tcp za pomocą funkcji winpcap, musisz przejść do części danych segmentu. nagłówek tcp ma stałą długość 20 bajtów + część opcjonalną, którą musisz określić za pomocą api winpcap.
długość części danych w segmencie tcp jest określana przez odjęcie długości nagłówka tcp (uzyskanego z pola w segmencie tcp) i długości nagłówka ip (z pola w datagramie IP, który hermetyzuje segment tcp) od całkowitej długości (uzyskanej z innego pola w datagramie IP).
, więc teraz masz całkowitą długość segmentu i długość części danych w segmencie. więc znasz przesunięcie w miejscu, w którym zaczynają się dane żądania HTTP.
przesunięcie jest
total length-length of data part
or
length of ip-header + length of tcp header
Nie używałem WinPcap. więc będziesz musiał dowiedzieć się, jak uzyskać te pola za pomocą api.
także datagramy ip mogą być dalej pofragmentowane, ale spodziewam się, że dostarczone zostaną tylko zmontowane datagramy używające tego api. Możesz ruszać!