#include <linux/module.h>
#include <linux/moduleparam.h>
#include <linux/netfilter_ipv4/ip_tables.h>
#include <net/ip.h>
MODULE_LICENSE("GPL");
/* 用于注册我们的函数的数据结构 */
static struct nf_hook_ops nfho;
/* 注册的hook函数的实现 */
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( "hook in net_hook.c\n");// 可以在此处添加自己的函数实现
return NF_ACCEPT;
}
/* 初始化程序 */
int simple_init()
{
/* 填充我们的hook数据结构 */
nfho.hook = hook_func; /* 处理函数 */
nfho.hooknum = NF_INET_PRE_ROUTING; /* 使用IPv4的第一个hook */
nfho.pf = PF_INET;
nfho.priority = NF_IP_PRI_FIRST; /* 让我们的函数首先执行 */
nfho.owner =THIS_MODULE;
nf_register_hook(&nfho);
printk(KERN_ALERT "model init\n");
return 0;
}
/* 清除程序 */
void simple_exit()
{
nf_unregister_hook(&nfho);
printk(KERN_ALERT "model exit\n");
}
module_init(simple_init);
module_exit(simple_exit);
Makefile:
ifneq ($(KERNELRELEASE),)
obj-m :=net_hook.o
else
KERNELDIR=/lib/modules/$(shell uname -r)/build
PWD=$(shell pwd)
default:
make -C $(KERNELDIR) M=$(PWD) modules
endif
clean:
rm -f *.o modules.order Module.symvers net_hook.mod.c .net*
rm -r .tmp_versions
没有评论:
发表评论