現在、winpcap を使用してプロジェクトを開発しています。スニッフィングされるパケットは通常、断片化されたパケットであることがわかっているためです。
この TCP セグメントを再構築する方法は?..利用可能なアイデア、提案、またはチュートリアル?..
これがHTTPヘッダーを表示できる唯一の方法だと思います...
ありがとう!..
現在、winpcap を使用してプロジェクトを開発しています。スニッフィングされるパケットは通常、断片化されたパケットであることがわかっているためです。
この TCP セグメントを再構築する方法は?..利用可能なアイデア、提案、またはチュートリアル?..
これがHTTPヘッダーを表示できる唯一の方法だと思います...
ありがとう!..
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 を使用して再構築されたデータグラムのみが提供されることを期待しています。準備できた!
TCP フラグメントのようなものはありません。IP プロトコルにはフラグメントがあります。TCP はストリーム プロトコルです。両側のシーケンス番号に従って、ストリームを意図した順序に組み立てることができます。すべての TCP パケットは IP レベルに移動し、そこでフラグメント化できます。すべてのフラグメントを収集し、ヘッダーからフラグメント オフセットをたどることで、各パケットを組み立てることができます。
必要な情報はすべてヘッダーにあります。ウィキペディアの記事は、各フィールドが何であるかを説明するのに非常に役立ちます
http://en.wikipedia.org/wiki/TCP_header#Packet_structure
http://en.wikipedia.org/wiki/IPv4#Header