2010-11-20 21 views
1

私のプロジェクトの一環として、HTTPリクエストを含むIPパケットをGoogleに送信しようとしています。私はWinpcapライブラリとVC++を使用しています。現在、TCPの3ウェイハンドシェーピングパケットは処理されていますが、TCP ACKパケットを送信した後に実際のHTTP要求パケットを送信することに固執しています。 wiresharkを使用してパケットをキャプチャすると、このパケットは「再構成されたPDUのTCPセグメント」とマークされます。プロトコル列も 'HTTP'ではなく 'TCP'です。どうしましたか?この方法でHTTPパケットをどのように送信するのですか?rawソケットとWinPcapを使用してHTTPリクエストを送信します

答えて

1

なぜWinPCapを使用してパケットを送信していますか?代わりに通常のソケットを使用する必要があります。さらに、curlやMicrosoft独自のWinInet APIやWinHTTP APIなど、HTTPプロトコルを実装するソケットライブラリを使用してください。

2

必ずしも間違っているとは限りません。

デフォルトでは、WiresharkはTCPデータを上位レベルのプロトコルハンドラに渡します。この場合、HTTPリクエストとレスポンス全体を再構成しようとします。これは、順番に最終パケットに再組立てのメッセージを添付し、「再組み立てPDUのTCPセグメント」と他のパケットにラベルを付ける:

alt text

あなたは個々のパケットを調査するために、この再構築機能を無効にすることができます:

  • 編集 - >設定 - >プロトコル - > TCP
  • のチェックを外し
"subdissectorは、TCPストリーム再組み立てすることを許可します"
1

これを拡張する予定の場合は、HTTPプロトコルの基礎を学ぶことをお勧めします。生のソケットを実行してget要求を投げることで混乱します。いくつかのソースコードを読んでください。

しかし、私は本当にpcapのポイントを見ません。実際のソケットをコーディングする必要がない場合は、Wininetライブラリを使用することができます。Wininet lib

しかし、未処理のソケットをコード化したい場合は、まずwinsockを使用します。 HTTPとTCPの違いは、一部の人にとって理解しにくいものです。 HTTPはTCPに基づいているため、技術的にはすべて同じです。TCPは文字通り何千ものアプリケーションに使用されます。お使いのコンピュータのほとんどの接続はTCPです。

HTTPリクエストを送信するpcapプログラムでMITM攻撃として接続を傍受しようとしている場合、おそらくPcapでプログラミングを学ぶでしょう。これには多くのチュートリアルがあります(this oneなど)。

PS:初心者の方には分かりづらいため、winsocksチュートリアルをご覧ください。また、winpcapはすべてのシステムでサポートされているわけではなく、(場合によっては)インストールするのに苦労することもあります。これを行うには、正直言ってwinsockを使うほうが良いでしょう。 Wininetにははるかに多くのサポートがあります。私はW2K +ビルドのすべてがすべてwininetを持っていると信じています(互換性のためには問題はないと思います)。またはwinsocks。

1

おそらく、\r\nで2回のリクエストを完了していない可能性があります。

GET/HTTP/1.0\r\n文字列を送信すると、パケットは受信されません。

この文字列は、GET/HTTP/1.0\r\n\r\nに送信する必要があります。

関連する問題