`
Iam42
  • 浏览: 275535 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

基于Netfilter hook功能的数据包拦截---有关DCN优化的碎碎念

阅读更多

接前一篇博客,我们需要拦截每一个收到或者发出的数据包,并对它进行处理,进过调研,实验(感谢实验室赵博,井大神),打算使用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


 

 

0
4
分享到:
评论

相关推荐

    NetFilter SDK nfsdk-src-1.4.1.4 源码

    NetFilter SDK nfsdk-src-1.4.1.4 源码

    ja-netfilter-all

    总结来说,`ja-netfilter` 是一个强大的Java网络过滤工具,不仅提供了精细的网络控制,还具备数据包监控、日志记录等功能,广泛适用于各种场景,如企业安全管理、应用开发和性能优化。了解并熟练使用这个工具,将有...

    goland 开发工具插件 ja-netfilter-all

    Ja-Netfilter-All插件的核心功能在于帮助开发者更便捷地处理网络过滤规则,尤其是在构建网络应用时,能够高效地实现数据包的捕获、分析和过滤。这个插件集成了对Netfilter框架的支持,Netfilter是Linux内核中的一个...

    Linux下基于Netfilter的数据包捕获技术研究

    Linux的Netfilter框架和数据包捕获技术

    Intellij 插件 ja-netfilter-all

    Ja-NetFilter是一个网络过滤库,它允许你在Java应用程序中拦截和修改网络流量。在IntelliJ IDEA中集成Ja-NetFilter插件,可能意味着开发者可以方便地对应用的网络通信进行监控、调试或安全检查。这对于测试、性能...

    IDEA的ja-netfilter包

    除了基本的网络拦截和修改功能,`ja-netfilter`还可以用于性能监控,记录每个网络请求的响应时间,帮助开发者识别性能瓶颈。 ### 7. 日志记录 所有的网络请求和响应都可以被记录下来,形成日志文件,便于后续的...

    ja-netfilter 插件包

    ja-netfilter 插件包ja-netfilter 插件包 可以使用

    ja-netfilter-v2.2.2.rar

    ja-netfilter-v2.2.2.rar

    ja-netfilter-all.zip

    通过实现特定接口或指定预定义的代理类,我们可以实现在程序运行过程中进行拦截、监控、修改等操作,从而为开发者提供了强大的代码增强功能。 二、ja-netfilter-all的核心功能 ja-netfilter-all主要提供了以下功能...

    netfilter-nf-conntrack-模块实现分析.doc编程资料

    netfilter-nf-conntrack-模块实现分析.doc

    深入Linux网络核心堆栈

    2 - 各种Netfilter hook及其用法 2.1 - Linux内核对数据包的处理 2.2 - Netfilter对IPv4的hook 3 - 注册和注销Netfilter hook 4 - Netfilter 基本的数据报过滤技术[1] 4.1 - 深入hook函数 4.2 - 基于接口进行...

    ja-netfilter2.zip

    ja-netfilter插件主要关注网络数据包过滤,它允许用户对IDEA中发送和接收的HTTP请求进行拦截、修改和分析,极大地提升了开发者在调试网络相关的应用程序时的便利性。在实际开发过程中,尤其是处理Web服务或者涉及到...

    ja-netfilter自定义时间

    在janf_config.txt文件中可以自定义破解时间 第一步点击:Start Trial 登录...第三步:-javaagent:C:\\ja-netfilter\\ja-netfilter.jar(此目录是ja-netfilter.jar存放的终极目录) 第四步:点击save保存,重启IDEA

    ja-netfilter压缩包

    ja-netfilter压缩包

    netfilter,获取并分析底层数据包

    Netfilter的核心机制是通过一系列的hook点来拦截并处理网络数据包。这些hook点分布在数据包处理的不同阶段,允许开发者注册自己的回调函数来实现自定义的行为。 #### 1.1 本文涉及的内容 本文主要探讨了如何利用...

    基于Netfilter的数据包捕获技术研究.pdf

    基于Netfilter的数据包捕获技术研究.pdf

    netfilter-layer7-v2.21.tar

    netfilter-layer7-v2.21.tar

Global site tag (gtag.js) - Google Analytics