接前一篇博客,我们需要拦截每一个收到或者发出的数据包,并对它进行处理,进过调研,实验(感谢实验室赵博,井大神),打算使用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 源码
ja-netfilter-all的解码器功能意味着它可以解析这些编码的数据包,提取出有用的信息,这对于分析网络行为、检测潜在的攻击或者调试应用程序非常有用。 ja-netfilter-all可能包含以下核心组件和功能: 1. **Packet ...
Ja-Netfilter-All插件的核心功能在于帮助开发者更便捷地处理网络过滤规则,尤其是在构建网络应用时,能够高效地实现数据包的捕获、分析和过滤。这个插件集成了对Netfilter框架的支持,Netfilter是Linux内核中的一个...
Ja-NetFilter是一个网络过滤库,它允许你在Java应用程序中拦截和修改网络流量。在IntelliJ IDEA中集成Ja-NetFilter插件,可能意味着开发者可以方便地对应用的网络通信进行监控、调试或安全检查。这对于测试、性能...
Linux的Netfilter框架和数据包捕获技术
除了基本的网络拦截和修改功能,`ja-netfilter`还可以用于性能监控,记录每个网络请求的响应时间,帮助开发者识别性能瓶颈。 ### 7. 日志记录 所有的网络请求和响应都可以被记录下来,形成日志文件,便于后续的...
ja-netfilter 插件包ja-netfilter 插件包 可以使用
ja-netfilter-v2.2.2.rar
通过实现特定接口或指定预定义的代理类,我们可以实现在程序运行过程中进行拦截、监控、修改等操作,从而为开发者提供了强大的代码增强功能。 二、ja-netfilter-all的核心功能 ja-netfilter-all主要提供了以下功能...
netfilter-nf-conntrack-模块实现分析.doc
在janf_config.txt文件中可以自定义破解时间 第一步点击:Start Trial 登录...第三步:-javaagent:C:\\ja-netfilter\\ja-netfilter.jar(此目录是ja-netfilter.jar存放的终极目录) 第四步:点击save保存,重启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 - 基于接口进行...
ja-netfilter插件主要关注网络数据包过滤,它允许用户对IDEA中发送和接收的HTTP请求进行拦截、修改和分析,极大地提升了开发者在调试网络相关的应用程序时的便利性。在实际开发过程中,尤其是处理Web服务或者涉及到...
Netfilter的核心机制是通过一系列的hook点来拦截并处理网络数据包。这些hook点分布在数据包处理的不同阶段,允许开发者注册自己的回调函数来实现自定义的行为。 #### 1.1 本文涉及的内容 本文主要探讨了如何利用...
基于Netfilter的数据包捕获技术研究.pdf