2012-04-24 17 views
0

私は、TCPクライアントの側で、TCPフローのデータを傍受/変更できるようにしたいと考えています。 pcapの例は、tcpパケットヘッダ/ペイロードの解析方法を示しています。 しかし、私は、tcpクライアントがそれを読み込む前にパケットのペイロードを変更したい、あるいはパケットを完全にドロップしたいとします。 pcap capureでどうやったらいいですか?パケットデータの傍受と変更

答えて

0

libpcapまたはWinPcapでこれを行うことはできません。 libpcapはそれをサポートしていないOS機構の上に構築されています(これらの機構はパッシブパケット捕捉と低レベルのパケット捕捉と注入をサポートするために存在し、パケット入力と出力経路におけるパケット変更をサポートするものではありません)、WinPcapのドライバはそのようなOSのメカニズムです。

タッピングプログラムがネットワークスタックを通過するときにパケットを変更できるように、ネットワーキングスタックへのタッピングをサポートする何らかのメカニズムを、使用しているどのOSでも見つける必要があります。そのようなメカニズムは、一部のOSでは存在しないかもしれません。それが存在するOS上にあれば、おそらく非常にOSに依存しているでしょう。 (libpcapの使用方法もOSに依存しますが、アプリケーションとの違いをアプリケーションから隠すために、libpcapが一部存在します)。

+0

あなたは、彼らがネットワークスタックを通過するタッププログラムがパケットを変更することができますように、ネットワークスタックを活用サポートし、使用しているものは何でもOSにいくつかのメカニズムを、見つける必要があります。 – user270398

+0

ありがとう、私はまだ非常にはっきりしていません.. "scapy"や "nemesis"のようなフレームワークはほとんどないようです...彼らはパケットを "手作り"して "注入"できます。既存のパケットのペイロードを変更する方法や、既存の接続用のTCPパケットを挿入する方法を見つけることができます。あなたは "netfilter"がLinux/BSDでこのような仕組みを提供すると思いますか? – user270398

+0

あなたがそれをサポートしていないので、それを見つけることができませんでした。 TCPに到達する前に受信したパケットをキャッチして変更したパケットをTCPに渡すのではなく、ネットワーク上でパケットを送信してパケットを「注入」します。 Netfilterは、Linux上であなたが望むことを可能にするかもしれません。 ipfirewallまたはPFはあなたが* BSDでそれをさせるかもしれません。 –

5

上記のように、pcapで傍受/修正を行うことはできません。

  • Linuxの:libnetfilter_queue + iptablesの
  • MacOSの FreeBSDの
  • のWindowsをipfwが+ソケットをそらす:WinPkFilter(このためには、以下のOSに依存する技術の一つが必要商用)、WinDivert(LGPL)、または独自のNDIS IMまたはWFPコールアウトドライバを作成します。

(通常の開示:WinDivertは私のプロジェクトです)。

1

ScapyはPythonと組み合わせて使用​​すると非常に優れたツールです。

あなたは、特定のタスクを実行するためにscapyの上にアプリケーションを構築することができます。また、コマンドラインを介して

をパケットモニタリングや編集のすべてのソートを行うことができます。

Scapy

関連する問題