Wenn ich ein großes HTTP-Paket habe, das in eine Anzahl von TCP-Paketen aufgeteilt wurde, wie kann ich sie in ein einzelnes HTTP-Paket zurückverwandeln? Grundsätzlich, wo im Paket sehe ich aus, wenn ein HTTP-Paket beginnt/endet? Ich sehe anscheinend keine Flags/Felder im TCP-Header, die den Anfang oder das Ende des HTTP-Pakets anzeigen.HTTP-Paketrekonstruktion
EDIT: Im Anschluss an die Antworten. Wenn TCP den Stream verwaltet, wie weiß er, wann der Stream beginnt und endet? Wird das durch das Öffnen und Schließen der Steckdose bestimmt? Einige Protokolle müssen auf einer bestimmten Ebene wissen können, wann der HTTP-Datenstrom/das HTTP-Paket gestartet und beendet wurde. Das würde ich gerne wissen.
Die Situation, in der ich bin, verwende ich einen Paket-Sniffer in C#, der TCP-Pakete einliest, und ich möchte in der Lage sein, die HTTP-Anfragen/Antworten/etc zu rekonstruieren. Durch die Schnittstelle gehen, wie wireshark und verschiedene andere Sniffer es schaffen. Gibt es alternativ C# -Bibliotheken, mit denen Sie die HTTP-Streams auf der höheren Ebene anzapfen können, wodurch ich die HTTP-Streams/-Pakete selbst rekonstruieren muss?
Danke.
Wenn der Content-Length-Feld nicht angegeben ist, gibt es andere Möglichkeiten zu, die Länge zu trainieren. z.B. http://www.httpwatch.com/httpgallery/chunked/ – mike
Möglicherweise ein bisschen spät, aber die 'Content-Length' Header nicht die gesamte Paketlänge angeben. Es gibt lediglich die Größe des Inhalts an, also den Body, der hinter den Headern steht. Die Header und der Körper sind durch '\ r \ n \ r \ n' getrennt. –