拦截数据包 linux,如何使用net_dev_add()API过滤和拦截Linux数据包?

您正在使您的模块处理所有以太网数据包. Linux将向所有匹配的协议处理程序发送数据包.由于IP已在您的内核中注册,因此您的模块和ip_rcv都将接收所有带有IP头的SKB.

如果不更改内核代码,则无法更改此行为.一种可能性是创建一个netfilter模块.这样,您可以在ip_rcv函数之后拦截数据包,并在需要时删除它(在Netfilters PREROUTING挂钩中).

这是一个小的Netfilter模块,我从我已编写的一些代码中提取.这个模块尚未完成,但主要内容已经到位.

#include

#include

// Handler function

static unsigned int my_handler (

unsigned int hook,

struct sk_buff *skb,

const struct net_device *in,

const struct net_device *out,

int (*okfn)(struct sk_buff *))

{

return NF_ACCEPT;

// or

return NF_DROP;

}

// Handler registering struct

static struct nf_hook_ops my_hook __read_mostly = {

.hook = my_handler,

.pf = NFPROTO_IPV4,

.hooknum = (1 << NF_INET_PRE_ROUTING),

.priority = NF_IP_PRI_FIRST // My hook will be run before any other netfilter hook

};

int my_init() {

int err = nf_register_hook (&my_hook);

if (err) {

printk (KERN_ERR "Could not register hook\n");

}

return err;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值