入侵防御系统中TCP数据流重组设计与实现.docVIP

入侵防御系统中TCP数据流重组设计与实现.doc

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

入侵防御系统中TCP数据流重组设计与实现   摘要:网络攻击越来越隐蔽,很多攻击把特征信息隐藏在多个数据包中,这大大增加了攻击检测的难度,TCP数据流重组是可靠数据传输及网络数据内容还原的基础,也是入侵防御系统中的基础模块。论文详细介绍了入侵防御系统中TCP数据流重组的设计原理及实现,给出了核心数据结构,最后分析了重组的效率及目前存在的问题。   关键词:入侵防御系统;TCP数据流重组;哈希表;缓存;   中图分类号:TP393.01 文献标识码:A 文章编号:1007-9599 (2012) 17-0000-02   1 引言   IPS(Intrusion Prevention System)是网络安全领域的一种基本安全防护设施,是对入侵检测系统(Intrusion Detection System IDS)和各种防火墙的有力补充。在攻击检测的过程中,为了准确有效得检测出隐蔽在多个数据包中的攻击,必须进行TCP会话的还原,从而得到完整的攻击特征。完成还原后再与攻击特征库???规则进行匹配,可以有效提高检测攻击的效率和准确度。   2 TCP数据流重组的实现原理   2.1 核心数据结构   用于保存一个完整TCP连接信息的结构:   struct tcp_stream{   struct tuple4 addr; //TCP连接双方的地址信息   char nids_state; //连接的逻辑状态   struct lurker_node *listeners; //包含回调函数的链表   struct half_stream client; //客户端状态及数据   struct half_stream server; //服务器端状态及数据   struct half_stream *next_node; //HASH中同一键值的下一个节点指针   struct half_stream *prev_node; //HASH中同一键值的前一个节点指针   int hash_index; //HASH表中的索引值   struct half_stream *next_time; //用于保存TCP连接的先后顺序,构建时间链   struct half_stream *prev_time;   int read; //本次读进数据缓冲区的数据长度   struct half_stream *next_free; //指向TCP连接缓冲池中下一个空闲结构   }   用于保存TCP连接终端信息的结构体:   struct half_stream{   char state; //状态   char collect; //如果大于0,则保存其数据到缓冲区中   char collect_urg; //如果大于0,则保存紧急数据   char *data; //未处理TCP数据缓冲区   int offset; //保存到“data”缓冲区的首字节数据偏移量   int count; //自从连接建立以来保存的数据字节数   int count_new; //最近一次接收到的数据字节数   int bufsize; //data区的长度   int rmem_alloc; //该TCP连接的所有数据的长度和   int urg_count; //该终端接收到得紧急数据的总数目   u_int acked; //未用   u_int seq; //本次TCP包中的SEQ   u_int ack_seq; //ACK   u_int first_data_seq; //TCP建立连接时的初始SEQ   u_char urgdata; //紧急数据   u_char count_new_urg; //如果非0,表示有紧急数据到达   u_char urg_seen; //有新的URG数据,并且不是以前的重复数据   u_int urg_ptr; //指向URG数据在流中的位置   u_short window; //TCP窗口大小   u_char wscale_on; //窗口扩大因子标志   u_int curr_ts; //当前时间   u_int wscale; //窗口扩大因子   struct skbuff *list; //当收到的TCP包中的SEQ比期望的大时,则将该数据先保存在此双向链表中,为访问方便,此链表按包中的SEQ从小到大排列   struct skbuff *listtail; //指向list链表的链尾   }   2.2 Hash表及Hash算法的设计   在TCP数据流的重组过程中,为了提高查找连接的速度,使用了Hash算法,并通过双向链表解决了Hash冲突情况,这与普通的链表的顺序查找相比,大大

文档评论(0)

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

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

1亿VIP精品文档

相关文档