连接跟踪技术.docxVIP

  1. 1、本文档共41页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
连接跟踪技术

连接跟踪技术前言本文是关于Netfilter中连接跟踪技术的一份参考文档,详细介绍了连接跟踪技术所涉及到的核心数据结构以及相关函数,最后以FTP的连接跟踪代码为例,详细介绍了数据包在连接跟踪模块中的行走进程。本文中的代码大多截取自Linux内核2.6.18版本,部分代码分析参照了互联网上前辈们的相关精华文档。文章中插入了很多结构图,其中绝大多数是自己依据参考重新制作的,也有少数几张是直接拷贝前人的。最后,希望本文能够为你了解Netfilter连接跟踪技术有所帮助。王孟2011-3-11NetFilter整体架构Netfilter提供了一个抽象、通用化的框架,该框架定义的一个子功能的实现就是包过滤子系统。Netfilter框架包含以下三部分:为每种网络协议(IPv4、IPv6等)定义一套钩子函数(IPv4定义了5个钩子函数),这些钩子函数在数据报流过协议栈的几个关键点被调用。在这几个点中,协议栈将把数据报及钩子函数标号作为参数调用netfilter框架;内核的任何模块可以对每种协议的一个或多个钩子进行注册,实现挂接,这样当某个数据包被传递给netfilter框架时,内核能检测是否有任何模块对该协议和钩子函数进行了注册。若注册了,则调用该模块的注册时使用的回调函数,这样这些模块就有机会检查(可能还会修改)该数据包、丢弃该数据包及指示netfilter将该数据包传入用户空间的队列;那些排队的数据包是被传递给用户空间的异步地进行处理。一个用户进程能检查数据包,修改数据包,甚至可以重新将该数据包通过离开内核的同一个钩子函数中注入到内核中。所有的包过滤/NAT等等都基于该框架。内核网络代码中不再有到处都是的、混乱的修改数据包的代码了。当前netfilter框架在IPv4、IPv6及Decnet网络栈中被实现。图2-1. Netfilter框架简图从图中可以看到IPv4一共有5个钩子函数,分别为:1 NF_IP_PRE_ROUTING 2 NF_IP_LOCAL_IN 3 NF_IP_FORWARD 4 NF_IP_POST_ROUTING 5 NF_IP_LOCAL_OUT 数据报从左边进入系统,进行IP校验以后,数据报经过第一个钩子函数NF_IP_PRE_ROUTING[1]进行处理;然后就进入路由代码,其决定该数据包是需要转发还是发给本机的;若该数据包是发被本机的,则该数据经过钩子函数NF_IP _LOCAL_IN[2]处理以后然后传递给上层协议;若该数据包应该被转发则它被NF _IP_FORWARD[3]处理;经过转发的数据报经过最后一个钩子函数NF_IP_POST_ ROUTING[4]处理以后,再传输到网络上。本地产生的数据经过钩子函数NF_IP_LOCAL_OUT [5]处理可以后,进行路由选择处理,然后经过NF_IP_POST_ROUTING[4]处理以后发送到网络上。内核模块可以对一个或多个这样的钩子函数进行注册挂接,并且在数据报经过这些钩子函数时被调用(图上所标注的是与连接跟踪相关的挂载函数),从而模块可以修改这些数据报,并向netfilter返回如下值:NF_ACCEPT 继续正常传输数据报NF_DROP 丢弃该数据报,不再传输NF_STOLEN 模块接管该数据报,不要继续传输该数据报NF_QUEUE 对该数据报进行排队(通常用于将数据报给用户空间的进程进行处理) NF_REPEAT 再次调用该钩子函数重要数据结构连接记录——ip_conntarck结构在Linux内核中,连接记录由ip_conntrack结构表示,如图3-1所示。连接记录中的结构体ip_conntrack_tuple_hash实际记录了连接所跟踪的地址信息(源和目的地址)和协议的特定信息(端口)。所有连接记录的ip_conntrack_tuple_hash以散列形式保存在连接跟踪表中。图3-1 ip_conntrack结构简图struct ip_conntrack{/* nf_conntrack结构定义于include/linux/skbuff.h,Line89,其中包括一个计数器use和一个destroy函数。计数器use对本连接记录的公开引用次数进行计数 */struct nf_conntrack ct_general;/*其中的IP_CT_DIR_MAX是一个枚举类型ip_conntrack_dir(位于include/linux/netfilter_ipv4/ip_conntrack_tuple.h,Line65)的第3个成员,从这个结构实例在源码中的使用看来,实际上这是定义了两个tuple多元组的hash表项tuplehash[IP_CT_DIR_ORIGINAL/0]和tuplehash[IP_CT_DIR_REPLY/1],利用两个不同

您可能关注的文档

文档评论(0)

shenlan118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档