我正在尝试编写可以捕获以太网帧并做出决定的内核模块:“接受”或“丢弃”包(简单过滤)。我使用了 sk_buff 和 nf_hookfn 以及此处描述的设置http://fcns.eu/2010/02/15/netfilter-hooks/。
不幸的是,我的模块只适用于 IPv4/6 包。当我收到原始以太网帧时,不会触发回调函数。
是否可以在将处理原始 Eth 的内核空间中进行过滤。帧?还有其他解决方案吗?我关心性能,我想尽快拒绝所有不需要的帧,然后再将它们发送到用户空间。
我的 linux:内核 PREEMPT RT 3.6.6 的 Ubuntu。
问问题
428 次
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 回答