Linux内核MOdule

时间:2012-03-27 17:25:07

标签: linux hook netfilter

是否可以使用netfilter挂钩所有以太网数据包?

我可以从ipv4或ipv6获取数据包。

编辑:

上面的代码是我的内核模块。我希望将到达一个以太网接口的所有数据包重定向到另一个接口。该模块只打印数据包到达的设备名​​称(仅用于测试)。在这个钩子我只是得到包类型是ipv4,但我想得到所有类型。

我在网上搜索但是我没有找到如何配置我的钩子来获取绕过以太网接口的所有数据包。

最好的问候

  

static struct nf_hook_ops nfho;

     

int hook_func(struct sk_buff * skb)

     

{   struct ethhdr * eth;

     

printk(“设备:%s \ n,skb-> dev->名称);

     

}

     

int init_module(){
  printk(“Hook Module online!\ n”);

     

nfho.hook =(nf_hookfn *)hook_func;

     

nfho.hooknum = NF_IP_PRE_ROUTING;
  nfho.pf = PF_INET;   nfho.priority = NF_IP_PRI_FIRST;

     

nf_register_hook(安培; nfho);

     

返回0; }

     

/ *清理例程* / void cleanup_module(){

     

printk(“Over and Out!\ n”);   nf_unregister_hook(安培; nfho); }

1 个答案:

答案 0 :(得分:0)

确定, 如果我做得很好,你只愿意接受所有以太网验证的数据包并将它们传递给另一个接口。 在这种情况下,只需包含内核文件:

#include <linux/if_ether.h>

你得到标题:

struct ethhdr *hdr = eth_hdr(skb);
// *skb is a ptr !!

并通过检查某些值确保以太有效 超出ethhdr结构。 然后只是由本地主机发送或修改地址,如果你希望其他接口接受它,就像它是他的数据包。