在netfilter里面,注册一个hook函数如下: static struct nf_hook_ops _ops[] __read_mostly = { { .hook = _local_in, .owner = THIS_MODULE, .pf = PF_INET, .hooknum = NF_INET_LOCAL_IN, .priority = NF_IP_PRI_LAST, } }; 这里设定了NF_IP_PRI_LAST,那接受到的数据包里面的sk_buff是否是已经分片重组过了呢? 另外一个问题: 在netfilter的hook里面使用内核的 textsearch_prepare("kmp", pattern, strlen(pattern...
by coconut-zj - 内核源码 - 2012-04-25 11:02:22 阅读(1432) 回复(4)
LINUX网络协议栈实现分析(-) skbuff的实现 本文是我尝试分析LINUX网络协议栈实现的一系列文章中的第一篇,主要分析 LINUX网络协议栈中skbuff的实现。分析以LINUX2.2.x为基础,同时也包 括了相同的描述对象在LINUX2.4.x中的新变化。本文引用的代码的版本分别 是:LINUX2.2.25,LINUX2.4.20。 1 简介 了解网络协议栈的人都知道,网络协议栈是一个有层次的软件结构,层与层之 间通过预定的接口传递网络报文。网络报文中包含了在协议...
最近好多问题想问,但,有个最尖锐的问题想问对协议栈有所了解的朋友。 linux协议栈的skbuff资源的申请和释放相关,有所不清楚。 就是,发送数据包的过程中,我们对缓冲区的申请和释放的问题。感觉对skbuff是不可控的,资源是你申请的,最后等数据包发送出去,资源也必须由你来释放。 很想知道,是不是缓冲区就是用了这一块资源,经由协议栈的tcp/udp,ip,链路层,最后到了网卡驱动的流程,最后把他释放了? 还是,在每一层都有一...
Linux中skbuff的实现(转载) Linux中skbuff的实现(转载) 本文是我尝试分析LINUX网络协议栈实现的一系列文章中的第一篇,主要分析 LINUX网络协议栈中skbuff的实现。分析以LINUX2.2.x为基础,同时也包 括了相同的描述对象在LINUX2.4.x中的新变化。本文引用的代码的版本分别 是:LINUX2.2.25,LINUX2.4.20。 1 简介 了解网络协议栈的人都知道,网络协议栈是一个有层次的软件结构,层与层之 间通过预定的接口传递网络...
Linux中skbuff的实现(转载) Linux中skbuff的实现(转载) 本文是我尝试分析LINUX网络协议栈实现的一系列文章中的第一篇,主要分析 LINUX网络协议栈中skbuff的实现。分析以LINUX2.2.x为基础,同时也包 括了相同的描述对象在LINUX2.4.x中的新变化。本文引用的代码的版本分别 是:LINUX2.2.25,LINUX2.4.20。 1 简介 了解网络协议栈的人都知道,网络协议栈是一个有层次的软件结构,层与层之 间通过预定的接口传递网络报...
Linux中skbuff的实现(转载) 本文是我尝试分析LINUX网络协议栈实现的一系列文章中的第一篇,主要分析 LINUX网络协议栈中skbuff的实现。分析以LINUX2.2.x为基础,同时也包 括了相同的描述对象在LINUX2.4.x中的新变化。本文引用的代码的版本分别 是:LINUX2.2.25,LINUX2.4.20。 1 简介 了解网络协议栈的人都知道,网络协议栈是一个有层次的软件结构,层与层之 间通过预定的接口传递网络报文。网络报文中包含了在协议...
文件: skbuff图示.rar 大小: 37KB 下载: 下载 文件: skbuff图示.rar 大小: 37KB 下载: 下载 /* * sk_buff 完全注释 * 金伟注释 blog -- http://jinweidavid.cublog.cn 转载请注明 */ /* * 本文件取自linux 2.6.13内核的skbuff.c */ /* * Routines having to do with the 'struct sk_buff' memory handlers. * * Authors: Alan Cox * Florian La Roche * * Version: $Id: skbuff.c,v 1.90 2001/11/07 05:56:19 da...
本帖最后由 kangle000 于 2010-07-19 06:59 编辑
以下代码是在2.6.31内核中执行的,根据send_rst改写的。但是代码存在以下几个问题:
1、捕包发现ip头的version字段为0,offset的值不为0,校验出错。
2、udp头的内容好像并没有更改。
3、us指针指向的内容并没有改变
4、经常死机
请大家帮我看看是哪里的问题[code]#ifndef __KERNEL__
#define __KERNEL__
#endif
#ifndef MODULE
#define MODULE
#endif
#include
在LINUX的实现中,同一个网络报文的数据在内存中是连续存放的,每个 网络报文都有一个控制结构,叫做sk_buff。 sk_buff是一个控制结构,通过它,才可以访问网络报文里的各种数 据。所以在分配网络报文存储空间时,同时也分配它的控制结构sk_buff。在这 个控制结构里,有指向网络报文的指针,也有描述网络报文的变量。下面是 sk_buff的定义,依次注释如下: struct sk_buff { struct sk_buff * next; struct sk_buff * prev; stru...