TCP è un protocollo flusso di byte. la sequenza di byte inviati dall'applicazione http è incapsulata nei segmenti di dati TCP e il flusso di byte viene ricreato prima che i dati vengano consegnati all'applicazione sull'altro lato. poiché si accede ai dataset tcp tramite winpcap, è necessario passare alla parte dati del segmento. l'intestazione di tcp ha una lunghezza fissa di 20 byte + una parte facoltativa che è necessario determinare utilizzando l'API winpcap.
la lunghezza della parte dati nel segmento tcp viene determinata sottraendo la lunghezza dell'intestazione tcp (ottenuta da un campo nel segmento tcp) e la lunghezza dell'intestazione ip (da un campo nel datagramma ip che incapsula il segmento tcp) dalla lunghezza totale (ottenuta da un altro campo nel datagramma IP).
così ora avete la lunghezza totale del segmento e la lunghezza della parte di dati all'interno del segmento. quindi conosci l'offset in cui iniziano i dati della richiesta http.
l'offset è
total length-length of data part
or
length of ip-header + length of tcp header
Non ho usato winpcap. quindi dovrai scoprire come ottenere questi campi usando l'api.
anche i datagrammi IP possono essere ulteriormente frammentati ma mi aspetto che vengano forniti solo datagrammi riassemblati usando questa api. Sei bravo ad andare!
fonte
2010-02-15 05:33:54