2010-02-13 3 views
5

ich bin jetzt ein Projekt mit winpcap entwickeln..als ich Pakete bekannt sind geschnüffelt sind in der Regel fragmentierte Pakete.wie man tcp segment wieder zusammenbaut?

, wie diese TCP segements wieder zusammenzusetzen? .. irgendwelche Ideen, Anregungen oder Tutorials? ..

das ich nehme die einzige Möglichkeit zu sein, ich den HTTP-Header anzeigen können ...

Dank! ..

Antwort

4

TCP ist ein Byte-Stream-Protokoll ist. Die Bytefolge, die von Ihrer HTTP-Anwendung gesendet wird, ist in TCP-Datensegmenten gekapselt, und der Bytedatenstrom wird neu erstellt, bevor die Daten an die Anwendung auf der anderen Seite übermittelt werden. Da Sie mit winpcap auf die TCP-Datensegmente zugreifen, müssen Sie zum Datenbereich des Segments gehen. Der Header von tcp hat eine feste Länge von 20 Bytes + ein optionaler Teil, den Sie mithilfe der winpcap-API ermitteln müssen.

Die Länge des Datenteils im TCP-Segment wird durch Subtraktion der tcp-Headerlänge (aus einem Feld im TCP-Segment) und der IP-Headerlänge (aus einem Feld im IP-Datagramm, das das TCP-Segment einkapselt) ermittelt. von der Gesamtlänge (von einem anderen Feld im IP-Datagramm erhalten).

Jetzt haben Sie also die gesamte Segmentlänge und die Länge des Datenteils innerhalb des Segments. Sie wissen also, wo die HTTP-Anfrage beginnt.

der Offset

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

i nicht winpcap verwendet haben. Sie müssen also herausfinden, wie Sie diese Felder mithilfe der API erhalten.

auch IP-Datagramme können weiter fragmentiert werden, aber ich erwarte, dass Sie nur neu zusammengestellten Datagramme mit dieser API zur Verfügung gestellt werden. Du bist startklar!

6

Es gibt kein TCP-Fragment. Das IP-Protokoll hat Fragmente. TCP ist ein Stream-Protokoll. Sie können den Stream in der vorgesehenen Reihenfolge zusammenstellen, indem Sie die Folgenummern auf beiden Seiten befolgen. Jedes TCP-Paket geht auf die IP-Ebene und kann dort fragmentiert werden. Sie können jedes Paket zusammenstellen, indem Sie alle Fragmente sammeln und dem Fragment-Offset aus dem Header folgen.
Alle Informationen, die Sie benötigen, befinden sich in den Kopfzeilen. Der Artikel wikipedia ist sehr nützlich bei der Erklärung, was jedes Feld

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

1

Je nachdem, wessen Verkehr Sie versuchen, passiv wieder zusammenzusetzen, können Sie einige TCP-Verschleierungstechniken ausprobieren, die dazu dienen, Personen zu verwirren, die versuchen genau das zu tun, was Sie versuchen. Überprüfen Sie this paper auf verschiedenen Betriebssystemwiederherstellungsverhalten.

2

PcapPlusPlus bietet diese Funktion sofort für alle wichtigen Betriebssysteme (einschließlich Windows). Überprüfen Sie das Beispiel TcpReassembly, um einen Arbeitscode und die API-Dokumentation zu sehen, um zu verstehen, wie die TCP-Reassembly-Feature

verwendet wird