我试图在我写的netfilter钩子中获取in / out的net_device名称。
在阅读了以下问答之后,NetFilterHook: Displaly Interface Name,我尝试按照说明进行打印,但是它不起作用。
每次我尝试打印IN接口的名称时我得到一个全零的字符数组(空白字符串)。 每次我尝试打印OUT接口的名称计算机卡住时,好像驱动程序中存在分段错误。
如果我取消打印线-驱动程序工作正常。
//Filename: hello-netfilter.c
#include <linux/module.h>
#include <linux/init.h>
#include <linux/netfilter.h>
#include <linux/netfilter_ipv4.h>
static struct nf_hook_ops nfho;
unsigned int hook_func(unsigned int hooknum,
struct sk_buff **skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff *)) {
printk(KERN_INFO "Packet!\n");
if (in != NULL && in->name != NULL)
{
printk(KERN_INFO "net_device in name: %s\n", in->name);
}
if (out != NULL && out->name != NULL)
{
printk(KERN_INFO "net_device out name: %s\n", out->name);
}
return NF_ACCEPT;
}
static int __init initialize(void) {
nfho.hook = hook_func; //Points to our hook function.
nfho.hooknum = NF_INET_PRE_ROUTING;
nfho.pf = PF_INET;
nfho.priority = NF_IP_PRI_FIRST;
nf_register_hook(&nfho);
return 0;
}
static void __exit cleanup(void) {
nf_unregister_hook(&nfho);
}
module_init(initialize);
module_exit(cleanup);
我尝试从两个字符数组打印每个字符-IN数组全为0,OUT使计算机再次卡住。