免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4477 | 回复: 4
打印 上一主题 下一主题

[C] [求助]模拟netfilter内核防火墙怎么写Makefile文件? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-04-27 13:32 |只看该作者 |倒序浏览
偶要写个C程序来模拟Linux的netfilter防火墙,代码如下:
  1. #ifndef _KERNEL_
  2. #define _KERNEL_
  3. #endif            
  4. #ifndef MODULE
  5. #define MODULE
  6. #endif
  7. #include <linux/module.h>
  8. #include <linux/sched.h>
  9. #include <linux/kernel.h>
  10. #include <linux/netdevice.h>
  11. #include <linux/ip.h>
  12. #include <linux/tcp.h>
  13. #include <linux/skbuff.h>
  14. #include <linux/proc.h>
  15. #include <linux/if.h>
  16. #include <linux/in.h>
  17. #include <linux/netifilter_ipv4.h>

  18. static unsigned int kill_port(unsigned int hooknum,
  19.                               struct sk_buff **skb,
  20.                               const struct net_device *in,
  21.                               const struct net_device *out,
  22.                               int (*okfn)(struct sk_buff*))
  23. {
  24. struct tcphdr *tcph;
  25. struct iphdr *iph;
  26. iph=(*skb)->nh.iph;

  27. if(iph->protocol==IPPROTO_TCP)
  28. {
  29. tcph=(*skb)->h.th;
  30. if(ntohs(tcph->source)==23)
  31. {
  32. printk("\nftp service refused");
  33. return NF_DROP;
  34. }
  35. return NF_ACCEPT;
  36. }

  37. struct nf_hook_op kill={
  38. .hook=kill_port,
  39. .owner=THIS_MODULE,
  40. .pf=PF_INET,
  41. .hooknum=NF_IP_LOCAL_OUT,
  42. .priority=NF_IP_PRI_FILTER,
  43. };

  44. int init_module(){
  45. nf_register_hook(&kill);
  46. return 0;
  47. }

  48. void cleanup_module(){
  49. nf_unregister_hook(
复制代码
然后想通过Makefile生成一个.ko文件,然后动态加载进内核。但Makefile文件不会怎么写,开始时,我是这些写的(我用的是Ubuntu 系统):
  1. obj-m:=kill.o
  2. KERNELDIR:=/lib/modules/2.6.31-14.generic/build
  3. PWD:=$(shell pwd)

  4. modules:
  5.         $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

  6. modules_install:
  7.         $(MAKE) -C $(KERNELDIR) M=$(PWD) modules_install

  8. clean:
  9.         $(MAKE) -C $(KERNELDIR) M=$(PWD) clean
复制代码
结果有 错了:

      估计是在  KERNELDIR:=/lib/modules/2.6.31-14.generic/build
                     PWD:=$(shell pwd)
有错,但不知道怎么写好,毕竟对内核不了解,系统高手指点一下,不胜感激。

论坛徽章:
0
2 [报告]
发表于 2010-04-27 13:35 |只看该作者
KERNELBUILD := /lib/modules/`uname -r`/build
INC := /usr/include/

default:
        make -I $(INC) -C $(KERNELBUILD) M=$(shell pwd) modules
clean:
        rm -rf *.o *.ko .*.mod.c *.cmd .tmp_versions .*

论坛徽章:
0
3 [报告]
发表于 2010-04-27 14:00 |只看该作者
回复 2# 梅川内依酷


    不好意思,再劳烦下,因为这样还是有错误:

    会不会是我的系统上的某些文件没装好呢?

论坛徽章:
0
4 [报告]
发表于 2010-04-27 14:13 |只看该作者
你先看看你的 /usr/include/linux/下有没有 netfilter_ipv4.h   netfilter_ipv4.h  你那里写错了

论坛徽章:
0
5 [报告]
发表于 2010-04-28 11:37 |只看该作者
可能是lz没有为编译准备相应的源码包
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP