接前一篇博客,我们需要拦截每一个收到或者发出的数据包,并对它进行处理,进过调研,实验(感谢实验室赵博,井大神),打算使用linux内核中的Netfilter模块实现这个功能。Netfilter中有一个hook的功能,可以在:
NF_IP_PRE_ROUTING 在完整性校验之后,选路确定之前
NF_IP_LOCAL_IN 在选路确定之后,且数据包的目的是本地主机
NF_IP_FORWARD 目的地是其它主机地数据包
NF_IP_LOCAL_OUT 来自本机进程的数据包在其离开本地主机的过程中
NF_IP_POST_ROUTING 在数据包离开本地主机“上线”之前
5个地方安插钩子(hook),每一个通过这些点的函数都会被勾出来,然后调用预先设置好的处理函数进行处理,这正是我们做NAOpt想要实现的功能!
测试demo的代码如下:
#define _KERNEL_ #include<linux/module.h> #include<linux/kernel.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("get it"); return NF_ACCEPT; } int init_module() { nfho.hook = hook_func; nfho.hooknum = NF_INET_PRE_ROUTING ; nfho.pf = PF_INET; nfho.priority = NF_IP_PRI_FIRST; nf_register_hook(&nfho); return 0; } void cleanup_module() { printk("over"); nf_unregister_hook(&nfho); }
写这个demo的时候遇到了2个问题:
1.如果在hook_function中不加入返回语句 return NF_ACCEPT,被勾住的数据包就不会被重新发送出去,网络传输是中断的,所以我们在编写NAOpt的时候,只要在hook函数中加入处理逻辑代码,最后在return NF_ACCEPT,就可以很好的完成封装任务;
2.nfho.hooknum = NF_INET_PRE_ROUTING ,这里是NF_INET_PRE_ROUTING 而不是很多参考文献中所说的
NF_IP_PRE_ROUTING,应为在linux/netfilter_ipv4.h这个头文件中有一个宏: #define NF_IP_PRE_ROUTING NF_INET_PRE_ROUTING
最后,附上demo的make文件
obj-m += test.o CURRENT_PATH := $(shell pwd) LINUX_KERNEL := $(shell uname -r) LINUX_KERNEL_PATH := /lib/modules/3.2.0-23-generic-pae/build all: make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) make -C $(LINUX_KERNEL_PATH) M=$(CURRENT_PATH) clean
分享到:
相关推荐
NetFilter SDK nfsdk-src-1.4.1.4 源码
Linux的Netfilter框架和数据包捕获技术
ja-netfilter ja-netfilter-all appcode.vmoptions clion.vmoptions datagrip.vmoptions dataspell.vmoptions gateway.vmoptions goland.vmoptions idea.vmoptions jetbrains_client.vmoptions ...
netfilter-nf-conntrack-模块实现分析.doc
IDEA的ja-netfilter包
2 - 各种Netfilter hook及其用法 2.1 - Linux内核对数据包的处理 2.2 - Netfilter对IPv4的hook 3 - 注册和注销Netfilter hook 4 - Netfilter 基本的数据报过滤技术[1] 4.1 - 深入hook函数 4.2 - 基于接口进行...
在janf_config.txt文件中可以自定义破解时间 第一步点击:Start Trial 登录...第三步:-javaagent:C:\\ja-netfilter\\ja-netfilter.jar(此目录是ja-netfilter.jar存放的终极目录) 第四步:点击save保存,重启IDEA
基于Netfilter的数据包捕获技术研究.pdf
netfilter-layer7-v2.21.tar
ja-netfilter-v2.2.2.rar
给内核打上补丁,加上七层防火墙,重新启动新内核,实现软件封堵
ja-netfilter-all
完整的更新版Netfilter, ebtables内核flow.
Linux内核Netfilter功能扩展模块,可以创建更强大的防火墙规则
Linux网络防火墙Netfilter的数据包传输过滤原理.pdf
【作品名称】:基于Netfilter的防火墙:可根据规则拦截记录流量包,具有NAT功能 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 ...
Linux4.x内核编程实战——netfilter hook 注册,调用示例.nf_hook_ops,nf_register_net_hook, nf_unregister_net_hook 使用