最近在工作中需要实现一个Linux防火墙相关的功能:将从ip1到ip2的第二个包给丢掉
在开发过程中发现网上关于netfilter的代码大都比较老了,已经不适用于现在的Linux,同时在学习过程中也同样参考了许多博客,这里记录一下遇到的坑(类Ubuntu的Linux应该都能参考,CentOS可能会有问题)
由于netfilter网上相关介绍很多也很详细,我就不重复造轮子了,推荐几个我看过的博客:
netfilter代码快速理解
Makefile文件的编写
将里面的sample.o换成自己c程序的名字.o就可以了,其余不用改,网上好多博客没有给出Makefile。注意将.c文件和Makefile放在同一目录
新版本Linux会遇到的问题
第一个和第三个问题都被说中了。第一个问题中nf_register_net_hook(&init_net, reg)的reg就是老版本nf_unregister_hook(&nfho)中的&nfho,注意带上&。
然后就是.c文件和Makefile文件放在同一个目录就行了,具体的哪个目录无所谓,我是放在用户目录就编译成功了
.c文件和Makefile都有了之后只需要在那个目录执行make就能得到.ko文件,然后再执行insmod xxx.ko文件就能运行,可以使用lsmod | grep xxx 来查看运行情况,rmmod xxx停止运行,dmesg命令可以查看.c文件里printk()函数输出的东西,可以用作调试。