5

現在、winpcap を使用してプロジェクトを開発しています。スニッフィングされるパケットは通常、断片化されたパケットであることがわかっているためです。

この TCP セグメントを再構築する方法は?..利用可能なアイデア、提案、またはチュートリアル?..

これがHTTPヘッダーを表示できる唯一の方法だと思います...

ありがとう!..

4

5 に答える 5

8

tcp はバイト ストリーム プロトコルです。http アプリケーションから送信される一連のバイトは tcp データ セグメントにカプセル化され、データが反対側のアプリケーションに配信される前にバイト ストリームが再作成されます。winpcap を使用して tcp データセグメントにアクセスしているため、セグメントのデータ部分に移動する必要があります。tcp のヘッダーには、20 バイトの固定長と、winpcap API を使用して決定する必要があるオプションの部分があります。

tcp セグメントのデータ部分の長さは、全長から tcp ヘッダーの長さ (tcp セグメントのフィールドから取得) と ip ヘッダーの長さ (tcp セグメントをカプセル化する ip データグラムのフィールドから) を差し引くことによって決定されます。 (ip データグラムの別のフィールドから取得)。

これで、セグメントの合計長とセグメント内のデータ部分の長さがわかりました。httpリクエストデータが始まるオフセットがわかります。

オフセットは

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

私はwinpcapを使用していません。そのため、API を使用してこれらのフィールドを取得する方法を見つける必要があります。

また、IP データグラムはさらに断片化される可能性がありますが、この API を使用して再構築されたデータグラムのみが提供されることを期待しています。準備できた!

于 2010-02-15T05:33:54.657 に答える
7

TCP フラグメントのようなものはありません。IP プロトコルにはフラグメントがあります。TCP はストリーム プロトコルです。両側のシーケンス番号に従って、ストリームを意図した順序に組み立てることができます。すべての TCP パケットは IP レベルに移動し、そこでフラグメント化できます。すべてのフラグメントを収集し、ヘッダーからフラグメント オフセットをたどることで、各パケットを組み立てることができます。
必要な情報はすべてヘッダーにあります。ウィキペディアの記事は、各フィールドが何であるかを説明するのに非常に役立ちます

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

于 2010-02-13T23:27:40.870 に答える