2

問題が発生しました。これに関する情報があるかもしれません。実行中のプロセスでソケット受信関数 (recv) をフックし、受信データを変更したいと考えています。カーネルモジュールを使用してこれを行うことができますが、そのようなフックを行う方法に関する情報を見つけることができません。

私は Netfilter や iptables のような別の方法を試みましたが、これらの方法は遅くなりました。

4

1 に答える 1

4

recv() だけでなく、いくつかの異なる syscall を使用できることに注意してください。

問題のアプリケーションが (syscall を手動で作成するのではなく) C ライブラリを介してカーネルと対話し、それを再起動してテストをセットアップできると仮定すると、LD_PRELOAD 環境変数を使用して最初に対象の syscall ラッパーをインターセプト ラッパーに置き換えるカスタム ライブラリ。

または、strace が行うように syscall インターセプトを設定し、関心のあるものをモンキーすることもできます。

もう 1 つのオプションは、アプリケーションをリモート システムに直接接続させずに、代わりにプロキシを作成し、それをプロキシに接続させ、プロキシをリモート システムに接続させることです。これの主な利点は、移植性が高く、プラットフォーム固有の詳細をほとんど必要としないことです。

于 2012-04-29T15:51:39.247 に答える