2010-02-13 21 views
5

im obecnie rozwija się projekt przy użyciu winpcap .. jak mam znane pakiety są sniffed są zwykle pofragmentowane pakiety.jak ponownie złożyć segment tcp?

jak zmontować to TCP segements? .. jakieś pomysły, sugestie lub tutoriale dostępne? ..

to zakładam, że jest jedynym sposobem mogę zobaczyć nagłówek HTTP ...

dzięki! ..

Odpowiedz

4

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ć!

6

Nie ma czegoś takiego jak fragment TCP. Protokół IP zawiera fragmenty. TCP jest protokołem strumieniowym. Możesz zmontować strumień do zamierzonej kolejności, podążając za numerami sekwencyjnymi obu stron. Każdy pakiet TCP przechodzi na poziom IP i może być tam podzielony. Możesz zmontować każdy pakiet, zbierając wszystkie fragmenty i śledząc przesunięcie fragmentu z nagłówka.
Wszystkie potrzebne informacje znajdują się w nagłówkach. Artykuły wikipedia są bardzo przydatne w wyjaśnianiu co każde pole jest

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

1

W zależności od tego, którego ruchu próbujesz pasywnie ponownie złożyć, możesz natrafić na techniki obfuskacji TCP zaprojektowane w celu dezorientacji osób próbujących zrobić dokładnie to, co próbujesz zrobić. Sprawdź this paper na temat różnych zachowań ponownego składania systemu operacyjnego.

2

PcapPlusPlus oferuje tę funkcję po wyjęciu z pudełka dla wszystkich głównych systemów operacyjnych (w tym Windows). Sprawdź przykład TcpReassembly, aby zobaczyć działający kod i dokumentację interfejsu API, aby dowiedzieć się, jak korzystać z funkcji ponownego składania TCP