TCP クライアント側で、TCP フローのデータを傍受/変更できるようにしたいと考えています。pcap の例は、tcp パケットのヘッダー/ペイロードを解析する方法を示しています。しかし、tcp クライアントがパケットを読み取る前にパケットのペイロードを変更するか、パケットを完全にドロップするとします。どうすればpcap capureでそれを行うことができますか?
3 に答える
上記のように、pcap で傍受/変更を行うことはできません。これには、次の OS 依存の手法のいずれかが必要です。
- Linux : libnetfilter_queue + iptables
- MacOS、FreeBSD : ソケット + ipfw をそらす
- Windows : WinPkFilter (商用)、WinDivert (LGPL)、または独自の NDIS IM または WFP コールアウト ドライバーを記述します。
(通常の開示: WinDivert は私のプロジェクトです)。
Python と組み合わせて使用される Scapy は、非常に優れたツール兼ライブラリです。
コマンドラインからあらゆる種類のパケットの監視と編集を行うことができます
また、scapy の上にアプリケーションを構築して、特定のタスクを実行することもできます。
libpcap や WinPcap ではできません。libpcap は、それをサポートしない OS メカニズムの上に構築されます (これらのメカニズムは、パケットの入出力パスでのパケットの変更をサポートするためではなく、パッシブ パケット キャプチャと低レベルのパケット キャプチャと挿入をサポートするために存在します)。そういうOSの仕組み。
使用している OS に関係なく、ネットワーク スタックを通過するパケットを盗聴プログラムが変更できるように、ネットワーク スタックへの盗聴をサポートする何らかのメカニズムを見つける必要があります。このようなメカニズムは、一部の OS には存在しない場合があります。それが存在するOSでは、存在する場合、おそらくOSに大きく依存しています。(libpcap が使用するメカニズムも OS に依存します。libpcap は、これらの違いをアプリケーションから隠し、可能な限り拡張するために存在します。)