我正在尝试编写能够捕获以太网帧并做出决定的内核模块:'accept'或'drop'包(简单过滤)。我将sk_buff和nf_hookfn用于此处描述的设置http://fcns.eu/2010/02/15/netfilter-hooks/。
不幸的是,我的模块仅适用于IPv4 / 6包。当我收到原始以太网帧时,不会触发回调函数。
是否可以在内核空间中进行处理原始Eth的过滤器。帧?还有其他解决方案吗?我关心性能,我希望在将它们发送到用户空间之前尽快拒绝所有不需要的帧。
我的linux:带内核PREEMPT RT 3.6.6的Ubuntu。
答案 0 :(得分: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);