协议分析器程序.docVIP

  1. 1、本文档共15页,可阅读全部内容。
  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文档。上传文档
查看更多
协议分析器程序 编程训练目的 协议分析器可以有效完成对网络上传输数据包的捕获与分析TCP/IP协议原理的理解、对网络管理与网络安全工具的设计与实现技术的提高会有很大地帮助,同时也可对网络嗅探器的实现机理有深入地了解。 编程训练要求 本次编程训练要求实现一个协议分析器。该协议分析器将包含以下几部分功能: 数据采集——实时捕捉Ethernet网数据包 TCP/IP分层体系结构 计算机网络实际上是按照不同的通信功能划分的层次结构系统,每一层的功能都由特定的协议来完成。TCP/IP协议族是当前最流行也是最成功的是一套的网络协议栈,其结构自底向上分为4层,分别为主机-网络层、互联网层、传输层和应用层。主机至网络层在TCP/IP中并没有做具体的规定。通常情况下我们选择Ethernet网作为底层网络环境,并使用常用的5层网络体系结构即物理层、数据链路层、网络层、传输层和应用层作为分层标准,如图6-1所示。在TCP/IP协议族的众多协议中,每种协议处理相应层所要求的网络功能,在图6-1中也给出了比较常见的网络协议及其所属的层次位置。 图16-1 TCP/IP常见协议及所在层次位置 数据的封装与解析 图16-2 数据的封装与解析 当应用程序通过IP网络传送数据时,数据被送入TCP/IP协议栈中,然后从上至下逐一通过每一层,直到最后被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息),这个过程被称作封装。通过以太网传输的比特流称作帧(frame)。在传输的另一端,当目的主机收到一个以太网数据帧时,数据就开始从协议栈由底向上逐层解析,去掉各层协议所加上的报文头部。每层协议均要检查报文头部中的协议标识字段,以确定要接收数据的上层协议,最终从报文中解析出应用层数据后交给应用程序处理。该封装与解析过程如图16-2所示。 本次要编写的协议分析器,就是从网络中捕获数据包并对其进行解析的过程。因此,我们需要了解每层协议所规定的报文格式,然后由底向上逐层对数据包进行解码,最后将分析的结果显示出来。 编程训练设计分析 协议分析器总体结构 协议分析器的整体结构按功能应分为三个部分,自底向上分别是数据捕获模块、协议解析模块和用户显示模块,如图16-3所示。其中用户显示模块由于灵活度比较大,既可以采用控制台方式输出,也可以使用Windows图形窗口界面的各种视图(如树形视图、列表视图、编辑视图或普通视图等)对解码结果进行显示,因此这里不做特殊要求,编程时由读者任意选择一种方式即可。后面仅对数据捕获模块和协议解析模块的关键代码进行分析。 图16-3 协议分析器整体结构图 数据捕获模块 数据捕获模块的主要功能是进行数据包的采集,这是整个系统的基础和数据来源。程序使用Winpcap来捕获网络中原始数据包。Winpcap是Win32环境下数据包捕获的开放代码函数库,它可以完成以下主要功能:a)捕获网络中的原始数据包。b)使用用户自定义规则对数据包进行过滤。c)发送用户自己构造的数据包到网络中。d)统计网络流量。具体使用方法参见其官方说明文档:/docs/docs_40/index.html。 使用Winpcap捕获数据包的算法一般分为以下几步: 获取并列出当前网络设备列表。 由用户选择并打开指定网卡。 根据过滤规则设置过滤器。 捕获数据包并进行解析处理。 参考流程图如图16-4所示。 图16-4 数据包捕获流程图 下面给出各步骤的核心代码。需要注意的是,为了使程序流程更加清晰,下面的代码片段中去除了错误检查等保护性代码,读者在自己编程时应注意添加。 获取并列出当前网络设备列表。 pcap_if_t* pAdaptersList = NULL; //网卡列表指针 char errbuf[PCAP_ERRBUF_SIZE]; //错误消息缓冲区 pcap_findalldevs(pAdaptersList, errbuf); //获取本地网络设备列表 /*列出找到的网络设备*/ int iAdapterCount = 0; for (pcap_if_t* pAdapter= pAdaptersList; pAdapter!=NULL; pAdapter=pAdapter-next) { iAdapterCount++; if (pAdapter-description) //如果有描述则输出详细信息 …… /*输出当前序号和描述信息(pAdapter-description)*/ else //否则输出网卡名 …… /*输出当前序号和网卡名(pAdapter-name)*/ } 由用户选择并打开指定网卡。 /*有些主机中有多个网卡,所以要列出所有网卡,让用户选择合适的网

文档评论(0)

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

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

1亿VIP精品文档

相关文档