4

ここでやりたいのは単なるキャプチャではありません。最初にパケットをキャプチャし、次にリアルタイムで特定のデータのペイロードをチェックし、それを削除し、署名を挿入し、パケットをスタックに再注入して、以前と同じように送信したいと考えています。

IPFW を使用して ipfw 迂回ソケットを読みましたが、非常に有望に見えます。パケットを変更し、迂回ソケットを使用してそれらをスタックに再注入する例についてはどうですか? また、好奇心の問題として、Java を使用してソケットからデータを読み取ることは可能でしょうか。

4

4 に答える 4

4

Divert Sockets : Divert Sockets mini HOWTOを参照してください。

これらは、特定の ipfw ルールに一致するトラフィックを特別な raw ソケットに渡すことによって機能し、変更されたトラフィックをネットワーク層に再注入できます。

于 2008-09-15T14:16:20.423 に答える
1

私が思うに、QUEUEまたはNFQUEUEiptablesターゲットを使用してユーザースペースでこれを行うことは可能です。クライアントアプリケーションはキューに接続し、一致するすべてのパケットを受信します。これらのパケットは、再注入される前に変更できます(必要に応じてドロップすることもできます)。

リンクする必要のあるクライアントライブラリlibnetfilter_queueがあります。悲しいことに、ドキュメントは最小限ですが、いくつかのメーリングリストの投稿と例があります。

パフォーマンス上の理由から、これをすべてのパケットに実行するのではなく、特定の一致するパケットにのみ実行する必要があります。これは、標準のiptablesルールを使用して一致させる必要があります。それでも不十分な場合は、独自のnetfilterカーネルモジュールを作成する必要があります。

于 2008-09-20T08:06:26.860 に答える
1

パケット キャプチャだけを探している場合は、libpcap が非常に人気があります。tcpdump や ethereal などの基本的なツールで使用されます。「スタックにフックする」限り、ネットワークの実装方法を根本的に変更する予定がない限り (つまり、独自のレイヤーを追加するか、TCP の動作を変更する)、パケットの変更または介入に IPF を使用するという考えは次のようになります。最善の策。Linux では、ユーザー空間モジュールの特定のリダイレクト ターゲットがあり、IPF にはおそらく似たようなものがあるか、IPF を変更して似たようなことを行うことができます。

パケットを確認するだけの場合は、libpcap を使用することをお勧めします。次の場所にあります: http://www.tcpdump.org/

于 2008-09-15T14:17:35.617 に答える
0

質問のBSDタグに気付くまで、iptablesを推奨する他の応答をエコーするつもりでした(一致させようとしているパターンと作成したいパケット変更の両方の複雑さに応じて)。

Stephen Pelicerがすでに述べたように、libpcap はパケットをキャプチャするための適切なオプションです。ただし、libpcap を使用してパケットを送信することもできると思います。参考までに、tcpreplayがそれを使用して pcap 形式のファイルを再生していると確信しています。

于 2008-09-20T08:52:43.130 に答える