欢迎来到天天文库
浏览记录
ID:49916809
大小:166.50 KB
页数:33页
时间:2020-03-05
《Linux连接跟踪源码分析报告.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、Linux连接跟踪源码分析IPConnectiontracking连接跟踪用来跟踪和记录连接状态,是netfilter的一部份,也是通过在hook点上注册相应的结构来工作的。无论是发送,接收,还是转发的数据包,都要经过两个conntrack模块。第一个conntrack点的优先级是最高的,所有数据包进入netfilter后都会首先被它处理,其作用是创建ip_conntrack结构。而最后一个conntrack的优先级最低,总是在数据包离开netfilter之前做最后的处理,它的作用是将该数据包的连接跟踪结构添加到系统的连接状态表中1.ip_conntarck结构ip_co
2、nntrack.h内核中用一个ip_conntrack结构来描述一个连接的状态structip_conntrack{/*nf_conntrack结构定义于include/linux/skbuff.h,Line89,其中包括一个计数器use和一个destroy函数。计数器use对本连接记录的公开引用次数进行计数*/structnf_conntrackct_general;/*其中的IP_CT_DIR_MAX是一个枚举类型ip_conntrack_dir(位于include/linux/netfilter_ipv4/ip_conntrack_tuple.h,Line65)的第
3、3个成员,从这个结构实例在源码中的使用看来,实际上这是定义了两个tuple多元组的hash表项tuplehash[IP_CT_DIR_ORIGINAL/0]和tuplehash[IP_CT_DIR_REPLY/1],利用两个不同方向的tuple定位一个连接,同时也可以方便地对ORIGINAL以及REPLY两个方向进行追溯*/structip_conntrack_tuple_hashtuplehash[IP_CT_DIR_MAX];/*这是一个位图,是一个状态域。在实际的使用中,它通常与一个枚举类型ip_conntrack_status(位于include/linux/ne
4、tfilter_ipv4/ip_conntrack.h,Line33)进行位运算来判断连接的状态。其中主要的状态包括:IPS_EXPECTED(_BIT),表示一个预期的连接IPS_SEEN_REPLY(_BIT),表示一个双向的连接...IPS_ASSURED(_BIT),表示这个连接即使发生超时也不能提早被删除IPS_CONFIRMED(_BIT),表示这个连接已经被确认(初始包已经发出)*/unsignedlongstatus;/*其类型timer_list位于include/linux/timer.h,Line11,其核心是一个处理函数。这个成员表示当发生连接超时
5、时,将调用此处理函数*/structtimer_listtimeout;/*所谓“预期的连接”的链表,其中存放的是我们所期望的其它相关连接*/structlist_headsibling_list;/*目前的预期连接数量*/unsignedintexpecting;/*结构ip_conntrack_expect位于ip_conntrack.h,这个结构用于将一个预期的连接分配给现有的连接,也就是说本连接是这个master的一个预期连接*/structip_conntrack_expect*master;/*helper模块。这个结构定义于ip_conntrack_help
6、er.h,这个模块提供了一个可以用于扩展Conntrack功能的接口。经过连接跟踪HOOK的每个数据报都将被发给每个已经注册的helper模块(注册以及卸载函数分别为ip_conntrack_helper_register()以及ip_conntrack_helper_unregister(),分别位于ip_conntrack_core.c)。这样我们就可以进行一些动态的连接管理了*/structip_conntrack_helper*helper;/*一系列的nf_ct_info类型(定义于include/linux/skbuff.h,Line92,实际上就是nf_co
7、nntrack结构)的结构,每个结构对应于某种状态的连接。这一系列的结构会被sk_buff结构的nfct指针所引用,描述了所有与此连接有关系的数据报。其状态由枚举类型ip_conntrack_info定义(位于include/linux/netfilter_ipv4/ip_conntrack.h,Line12)共有5个成员:IP_CT_ESTABLISHED:数据报属于已经完全建立的连接IP_CT_RELATED:数据报属于一个新的连接,但此连接与一个现有连接相关(预期连接);或者是ICMP错误IP_CT_NEW:数据报属于一
此文档下载收益归作者所有