- 论坛徽章:
- 0
|
偶要写个C程序来模拟Linux的netfilter防火墙,代码如下:- #ifndef _KERNEL_
- #define _KERNEL_
- #endif
- #ifndef MODULE
- #define MODULE
- #endif
- #include <linux/module.h>
- #include <linux/sched.h>
- #include <linux/kernel.h>
- #include <linux/netdevice.h>
- #include <linux/ip.h>
- #include <linux/tcp.h>
- #include <linux/skbuff.h>
- #include <linux/proc.h>
- #include <linux/if.h>
- #include <linux/in.h>
- #include <linux/netifilter_ipv4.h>
- static unsigned int kill_port(unsigned int hooknum,
- struct sk_buff **skb,
- const struct net_device *in,
- const struct net_device *out,
- int (*okfn)(struct sk_buff*))
- {
- struct tcphdr *tcph;
- struct iphdr *iph;
- iph=(*skb)->nh.iph;
- if(iph->protocol==IPPROTO_TCP)
- {
- tcph=(*skb)->h.th;
- if(ntohs(tcph->source)==23)
- {
- printk("\nftp service refused");
- return NF_DROP;
- }
- return NF_ACCEPT;
- }
- struct nf_hook_op kill={
- .hook=kill_port,
- .owner=THIS_MODULE,
- .pf=PF_INET,
- .hooknum=NF_IP_LOCAL_OUT,
- .priority=NF_IP_PRI_FILTER,
- };
- int init_module(){
- nf_register_hook(&kill);
- return 0;
- }
- void cleanup_module(){
- nf_unregister_hook(
复制代码 然后想通过Makefile生成一个.ko文件,然后动态加载进内核。但Makefile文件不会怎么写,开始时,我是这些写的(我用的是Ubuntu 系统):- obj-m:=kill.o
- KERNELDIR:=/lib/modules/2.6.31-14.generic/build
- PWD:=$(shell pwd)
- modules:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) modules
- modules_install:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install
- clean:
- $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
复制代码 结果有 错了:
估计是在 KERNELDIR:=/lib/modules/2.6.31-14.generic/build
PWD:=$(shell pwd)
有错,但不知道怎么写好,毕竟对内核不了解,系统高手指点一下,不胜感激。 |
|