6

今日、PC 上のすべてのネットワーク トラフィックを傍受できる Wireshark に出くわしました。リクエスト後にデータを変更して(PCに送り返されるデータ)、正規表現を使用して変更できるかどうか疑問に思っていましたか?ブラウザでレンダリングされるに、データ内の単語やパターンを置き換えますか? (例: mad という単語を happy に置き換えるか、ウェブサイト全体を「Stop procrastinating」に置き換えます)

これが可能な場合:

  • どのように実装すればよいですか?どのような機能が不可欠になりますか?
  • これを達成するのに役立つオープンソース ライブラリはありますか?
  • これを実装する前に事前に読んでおくべきことはありますか?

これのプラットフォームは Windows になることに注意してください。C++ で試してみます。

4

3 に答える 3

5

You can use WinDivert (LGPL) for this purpose (disclaimer: WinDivert is my project). WinDivert is a user-mode API that lifts some kernel-mode WFP call-out driver functionality to user space.

The pseudo-code would look something like this:

HANDLE handle = DivertOpen(
    "inbound && "                // Inbound packets
    "tcp.SrcPort == 80 && "      // HTTP
    "tcp.PayloadLength > 0",     // Data
    0, 0, 0);
while (TRUE)
{
    // Capture a packet.
    DivertRecv(handle, buf, size, &addr, &len);

    // Modify the packet.
    ...

    // Re-inject modified packet.
    DivertSend(handle, buf, len, &addr, NULL);
}

Note that WinDivert is packet-level, so the HTTP stream may be split over multiple packets, which may complicate things.

于 2012-10-24T16:02:43.713 に答える
2

あなたが説明しているものは、「透過プロキシ」と呼ばれます。(ブラウザを変更していないと仮定します)。通常、ブラウザとネットワークの間に入るには、OS の助けが必要になるか、別のルーターにプロキシを実装する必要があります。Linux では、これは iptables で実現できます。Windowsにも同様の機能があると思います。

于 2012-08-24T19:01:02.753 に答える
1

Windows 7/vista では、Windows Filtering Platform (WFP) を使用できます。これにより、さまざまなレイヤーにフックを挿入し、これらのパケットにアクセスして変更し、tcp/ip スタックに再注入できます。Mac OS の場合は、ipfw でソケットの迂回を使用できます。したがって、ipfw でルールを設定し、特定のパケットを「ソケットの迂回」に迂回させ、変更を行ってから再注入します。

ところで、wireshark は実際にはトラフィックを傍受しません。トラフィックをダンプするだけです ~

于 2012-08-26T00:09:39.850 に答える