2011-11-15 7 views
8

カーネルモジュールを作成しようとしました。カーネルモジュールは、変更されたパケットをnetfilterフックで受け取ったものから送信することができます。私はhereを提供するコードスケルトンを使用しています。 、私が作成したRAWソケットであることsocketptrカーネルモジュールを介してパケットを送信する

len = sendpacket(sockptr, dev, IPPROTO_TCP, duplicate, ntohs(dupiph->tot_len)); 

devが渡さでnet_deviceさ:sendpacket関数はこれで呼び出された

:私は単にこのコードを使用してカーネル内部のrawソケットを作成していますフック機能によって私に伝えられ、複製は元のパケットの修正されたコピーである。

dev_queue_xmitへの呼び出しからの戻り値は、パケットが正常に送信されたことを示していますが、ワイヤでパケットが表示されません。私は2つの質問があります:まず、何が起こっているかをよりよくデバッグできるようにしたいので、それに関するアドバイスは非常に高く評価されます。また、私はソケットの作成を正しく処理しているのか、いくつかのタイプの構成があるかどうか不思議です。これは私にとってとても新しいものなので、何かばかげたものを紛失している可能性があります。

+0

「私はそのパケットを見ることができません」と言いました。私はwiresharkまたは別のスニッファプログラムをインストールすることをお勧めします。 – Michel

+0

申し訳ありませんが、私は明確にすべきでした。使用されているインタフェースは "venet0"で、これはopenvzコンテナによって使用されるインタフェースです。私はWiresharkを使ってそのインターフェース上のトラフィックを観察していて、パケットを見ませんでした。 – bschulte3

+0

iptablesがこのようなパケットを渡すように正しく設定されていますか? – Dan

答えて

1

タスクを実行するためにカーネルを変更する必要はありません。 tunやtapインターフェイスを使ってみたことがありますか?それで、あなたはすべての作業をユーザー空間で行うことができますか?チュートリアルです:http://backreference.org/2010/03/26/tuntap-interface-tutorial/

関連する問題