netfilterを使用してすべてのイーサネットパケットをフックできますか?Linuxカーネルモジュール
ipv4またはipv6からパケットを取得できます。
編集:
上記のコードは私のカーネルモジュールです。 1つのイーサネットインターフェイスに到着したすべてのパケットを別のインターフェイスにリダイレクトしたいのです。このモジュールは、パケットが到着した(テストのための)デバイスの名前を印刷します。このフックで私はちょうどパケットの魔法の種類を取得ipv4ですが、私はすべての種類を取得したい。
私はウェブで検索しましたが、イーサネットインターフェイスをバイパスするすべてのパケットを取得するためにフックを設定する方法が見つかりませんでした。
よろしく
nfho nf_hook_ops構造体の静的。
int型hook_func(構造体sk_buffの*のSKB)
{構造体ethhdr * ETH。
のprintk( "デバイス:%sの\ nは、skb-> DEV->名);
}
int型はinit_module(){
のprintk(" フックモジュールのオンライン\ n "は!) ;nfho.hook =(nf_hookfn *)hook_func;
nfho.hooknum = NF_IP_PRE_ROUTING;
nfho.pf = PF_INET; nfho.priority = NF_IP_PRI_FIRST;(& nfho);return 0; }
/*クリーンアップルーチン* /無効cleanup_module(){
のprintk( "オーバーとアウト\ N!"); nf_unregister_hook(& nfho); }
あなたが尋ねた唯一の質問への短い答えは「はい」ですが、それがあなたの全体的な質問であれば、それは最も近い価値があります(間違ったサイト*および*一般的な参照)。あなたの全体的な質問ではない場合は、より具体的にする必要があります(あなたがするまで、質問はまだまだ価値があります)。 – dmckee
私の投稿を再編集します。あなたが私を助けることができれば、私は感謝します。宜しくお願いします! – Ricardo
いいえ、あなたはそのためにnetfilterを使うことはできません。あなたはbridge-netfilterを使う必要があります。 – ninjalj