实验八协议分析器程序的设计和实现_第1页
实验八协议分析器程序的设计和实现_第2页
实验八协议分析器程序的设计和实现_第3页
实验八协议分析器程序的设计和实现_第4页
实验八协议分析器程序的设计和实现_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验八协议分析器程序的设计和实现实验目的:(1)掌握对网络上传输数据包的捕获方法。(2)解析Ethernet网数据帧头部的所有信息。(3)解析IP、ICMP数据包(4)解析传输层和应用层相关协议的头部信息(5)设立过滤规则,能过滤相应协议的数据包。(6)规定有良好的编程规范与注释信息,规定有具体的说明文档,涉及程序的设计思想、活动图、关键问题以及解决方法。2实验环境:(1)VC6.0(2)局域网能连接Internet。3.程序设计的关键问题以及解决方法有哪些?当应用程序通过IP网络传送数据时,数据被送入TCP/IP协议栈中,然后从上至下逐个通过每一层,直到最后被当作一串比特流送入网络。其中每一层对收到的数据都要增长一些首部信息,这个过程被称作封装。通过以太网传输的比特流称作帧。在传输的另一端,当目的主机收到一个以太网数据帧时,数据就开始从协议栈由底向上逐层解析,去掉各层协议所加上的报文头部。每层协议均要检查报文头部中的协议标记字段,以拟定要接受数据的上层协议,最终从报文中解析出应用层数据后交给应用程序解决。本次要编写的协议分析器,就是从网络中捕获数据包并对其进行解析的过程。因此,我们需要了解每层协议所规定的报文格式,然后由底向上逐层对数据包进行解码,最后将分析的结果显示出来。描述程序设计过程,并画出程序活动图。协议分析器总体结构:协议分析器的整体结构按功能应分为三个部分,自底向上分别是数据捕获模块、协议解析模块和用户显示模块。数据包捕获流程:捕获数据包的算法一般分为以下几步:获取并列出当前网络设备列表。由用户选择并打开指定网卡。根据过滤规则设立过滤器。捕获数据包并进行解析解决:协议解析模块:对捕获的数据包按照数据链路层(MAC)、网络层(IP、ARP/RARP)、传输层(TCP、UDP、ICMP)和应用层(HTTP等)的层次结构自底向上进行解析,最后将解析结果显示输出。解析Ethernet帧解析ARP数据包解析IP数据包解析ICMP,TCP和UDP数据包给出关键代码,并附注释。解析Ethernet帧typedefstruct{BYTEDesMacAddr[6]; //目的地址 BYTESrcMacAddr[6]; //源地址 WORDLengthOrType; //数据长度或类型}MAC_HEADER;//MAC帧类型定义constu_shortMAC_TYPE_IP =0x0800;constu_shortMAC_TYPE_ARP =0x0806;constu_shortMAC_TYPE_RARP =0x8035;MAC_HEADER*pMacHdr=(MAC_HEADER*)pPkt;//Mac目的地址strItem.Format("Destinationaddress:%02X:%02X:%02X:%02X:%02X:%02X", pMacHdr->DesMacAddr[0], pMacHdr->DesMacAddr[1], pMacHdr->DesMacAddr[2], pMacHdr->DesMacAddr[3], pMacHdr->DesMacAddr[4], pMacHdr->DesMacAddr[5]);//Mac源地址strItem.Format("Sourceaddress:%02X:%02X:%02X:%02X:%02X:%02X", pMacHdr->SrcMacAddr[0], pMacHdr->SrcMacAddr[1], pMacHdr->SrcMacAddr[2], pMacHdr->SrcMacAddr[3], pMacHdr->SrcMacAddr[4], pMacHdr->SrcMacAddr[5]);//类型/长度字段if(ntohs(pMacHdr->LengthOrType)>1500)//类型字段(EthernetV2.0){ //根据类型字段调用相应的上层协议解决函数 if(ntohs(pMacHdr->LengthOrType)==MAC_TYPE_IP) //IP协议 { strItem="IP"; ParseIPPacket((BYTE*)pMacHdr+sizeof(MAC_HEADER), iLen-sizeof(MAC_HEADER)); } elseif(ntohs(pMacHdr->LengthOrType)==MAC_TYPE_ARP) //ARP协议 { strItem="ARP"; ParseARPPacket((BYTE*)pMacHdr+sizeof(MAC_HEADER), iLen-sizeof(MAC_HEADER)); } elseif(ntohs(pMacHdr->LengthOrType)==MAC_TYPE_RARP) //RARP协议 { strItem="RARP"; ParseRARPPacket((BYTE*)pMacHdr+sizeof(MAC_HEADER), iLen-sizeof(MAC_HEADER)); } else //其他 strItem="UNKNOWN";}else//长度字段(IEEE802格式){ strItem.Format("Length:%dbytes",ntohs(pMacHdr->LengthOrType)); ……/*解析IEEE802数据帧,省略*/}解析ARP数据包//ARP头部结构typedefstruct{ u_shorthardware_type; //16位硬件类型u_shortproto_type; //16位协议类型 u_charhardware_addr_len; //8位硬件地址长度 u_charproto_addr_len; //8位协议地址长度 u_shortoperation_code; //16位操作码 u_charsrc_mac_addr[6]; //源Ethernet网地址 u_charscr_ip_addr[4]; //源IP地址 u_chardest_mac_addr[6]; //目的Ethernet网地址 u_chardest_ip_addr[4]; //目的IP地址}ARP_HEADER;//ARP报文操作码类型,1为请求,2位应答constu_shortARP_OP_REQUEST =1;//ARP请求constu_shortARP_OP_REPLY =2;//ARP应答ARP_HEADER*pARPHdr=(ARP_HEADER*)pPkt;ntohs(pARPHdr->hardware_type); //硬件类型ntohs(pARPHdr->proto_type); //上层协议类型pARPHdr->hardware_addr_len; //硬件地址长度pARPHdr->proto_addr_len; //协议地址长度//操作类型if(ntohs(pARPHdr->operation_code)==ARP_OP_REQUEST) strItem="(Request)";elseif(ntohs(pARPHdr->operation_code)==ARP_OP_REPLY) strItem="(Reply)";//源Mac地址strItem.Format("Sender'shardwareaddress:%02X:%02X:%02X:%02X:%02X:%02X", pARPHdr->src_mac_addr[0], pARPHdr->src_mac_addr[1], pARPHdr->src_mac_addr[2], pARPHdr->src_mac_addr[3], pARPHdr->src_mac_addr[4], pARPHdr->src_mac_addr[5]);//源IP地址in_addripAddr;memcpy(&ipAddr,pARPHdr->scr_ip_addr,sizeof(in_addr));inet_ntoa(ipAddr); //转化为点分十进制字符串//目的Mac地址strItem.Format("Target'shardwareaddress:%02X:%02X:%02X:%02X:%02X:%02X", pARPHdr->dest_mac_addr[0], pARPHdr->dest_mac_addr[1], pARPHdr->dest_mac_addr[2], pARPHdr->dest_mac_addr[3], pARPHdr->dest_mac_addr[4], pARPHdr->dest_mac_addr[5]);//目的IP地址memcpy(&ipAddr,pARPHdr->dest_ip_addr,sizeof(in_addr));inet_ntoa(ipAddr); //转化为点分十进制字符串//填充字段长度strItem.Format("Framepadding:%dbytes",iLen-sizeof(ARP_HEADER));解析IP数据包//IP头部结构typedefstruct{ unsignedchar hdr_len :4; //4位头部长度 unsignedchar version :4; //4位版本号 unsignedchar tos; //8位服务类型 unsignedshort total_len; //16位总长度 unsignedshort identifier; //16位标记符 unsignedshort frag_and_flags; //3位标志+13位片偏移 unsignedchar ttl; //8位生存时间 unsignedchar protocol; //8位上层协议号 unsignedshort checksum; //16位校验和 unsignedlong source_ip; //32位源IP地址 unsignedlong dest_ip; //32位目的IP地址}IP_HEADER;IP_HEADER*pIPHdr=(IP_HEADER*)pPkt;……/*解析IP头部各字段并显示输出*///根据不同上层协议调用相应解析函数switch(pIPHdr->protocol){caseIPPROTO_TCP: strItem="TCP"; ParseTCPPacket((BYTE*)pIPHdr+iIPHdrLen,iLen-iIPHdrLen); break;caseIPPROTO_UDP: strItem="UDP"; ParseUDPPacket((BYTE*)pIPHdr+iIPHdrLen,iLen-iIPHdrLen); break;caseIPPROTO_ICMP: strItem="ICMP"; ParseICMPPacket((BYTE*)pIPHdr+iIPHdrLen,iLen-iIPHdrLen); break;default: strItem="OTHERS";}解析ICMP,TCP和UDP数据包//ICMP基本头部typedefstruct{ BYTE type; //8位类型 BYTE code; //8位代码 USHORT cksum; //16位校验和}ICMP_BASE_HEADER;//----------------------------------------------------//ICMP回显头部(回显请求、回显应答)typedefstruct{ ICMP_BASE_HEADERbase_hdr; //基本头部 USHORT id; //16位标记符 USHORT seq; //16位序列号}ICMP_ECHO_HEADER;//----------------------------------------------------//ICMP差错报文头部(超时及目的不可达)typedefstruct{ ICMP_BASE_HEADERbase_hdr; //基本头部 ULONG unused; //32位未用,必须为0}ICMP_ERROR_HEADER;pICMPHdr->type; //类型pICMPHdr->code; //代码ntohs(pICMPHdr->cksum); //校验和//根据不同类型解析后续字段switch(pICMPHdr->type){caseICMP_ECHO_REQUEST: //回显请求报文caseICMP_ECHO_REPLY: //回显应答报文 { ICMP_ECHO_HEADER*pICMPEchoHdr=(ICMP_ECHO_HEADER*)pPkt; ntohs(pICMPEchoHdr->id); //标记符 ntohs(pICMPEchoHdr->seq); //序列号 if(iLen>sizeof(ICMP_ECHO_HEADER)) //选项数据 { for(inti=0;i<iLen-sizeof(ICMP_ECHO_HEADER);i++) ……/*打印选项数据*/ } break; } caseICMP_TIMEOUT: //超时差错报文 caseICMP_HOST_UNREACHABLE: //目的不可达差错报文 { ICMP_ERROR_HEADER*pICMPErrHdr=(ICMP_ERROR_HEADER*)pPkt; ntohl(pICMPErrHdr->unused); //保存字段 //解析产生差错的数据报IP首部(含选项字段)及其载荷的前8个字节 ParseIPPacket((BYTE*)pICMPErrHdr+sizeof(ICMP

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论