0

我正在尝试编写可以捕获以太网帧并做出决定的内核模块:“接受”或“丢弃”包(简单过滤)。我使用了 sk_buff 和 nf_hookfn 以及此处描述的设置http://fcns.eu/2010/02/15/netfilter-hooks/
不幸的是,我的模块只适用于 IPv4/6 包。当我收到原始以太网帧时,不会触发回调函数。

是否可以在将处理原始 Eth 的内核空间中进行过滤。帧?还有其他解决方案吗?我关心性能,我想尽快拒绝所有不需要的帧,然后再将它们发送到用户空间。

我的 linux:内核 PREEMPT RT 3.6.6 的 Ubuntu。

4

1 回答 1

0

Netfilters 在 L3 上工作,L2 替代方案称为 ebtables,它位于以太网桥中。

看看 ebt_arp 是如何注册它的匹配规则的:

static struct xt_match ebt_arp_mt_reg __read_mostly = {
        .name           = "arp",
        .revision       = 0,
        .family         = NFPROTO_BRIDGE,
        .match          = ebt_arp_mt,
        .checkentry     = ebt_arp_mt_check,
        .matchsize      = sizeof(struct ebt_arp_info),
        .me             = THIS_MODULE,
};

static int __init ebt_arp_init(void)
{
        return xt_register_match(&ebt_arp_mt_reg);
}

static void __exit ebt_arp_fini(void)
{
        xt_unregister_match(&ebt_arp_mt_reg);
}

module_init(ebt_arp_init);
module_exit(ebt_arp_fini);
于 2013-02-12T13:08:02.143 回答