计算机网络课程设计参考模板._第1页
计算机网络课程设计参考模板._第2页
计算机网络课程设计参考模板._第3页
计算机网络课程设计参考模板._第4页
计算机网络课程设计参考模板._第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

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

文档简介

1、 课 程 设 计 课程名称 计算机网络 题目名称 解析IP数据包 学 院 计算机学院 专业班级 软件工程一班 学 号 学生姓名 指导教师 2012年4月 3日目录一、概述4二、课程设计要求4三、预备知识4四、需求分析6五、可行性分析7六、设计基本思路7七、方案设计8八、程序代码9九、调试程序12十、总结体会14十一、参考资料14一、概述本课程设计是结合计算机网络课程的教学目标,帮助学生深入理解网络的基本工作原理和协议的设计思想,掌握处理网络问题的基本方法。要求学生独立完成设计题目,培养学生接受新知识和继续学习的能力,提高计算机网络方面的实践能力和加深计算机网络理论知识的理解。1、培养学生正确的

2、设计思想,理论联系实际的工作作风,严肃认真、实事求是的科学态度和勇于探索的创新精神。2、引导学生将书本上抽象的概念和具体实现技术结合起来,使学习深化;巩固和加深计算机网络课程中所学的理论知识和实际应用能力,培养学生综合运用所学计算机知识,分析和解决工程技术问题的能力。3、消除学生对计算机网络理论知识的神秘感,调动学生学习的积极性与主动性,进而锻炼解决实际问题的能力。通过课程设计训练,基本掌握分析问题,软件总体结构设计,用户界面的设计,程序代码编写等各方面的基本技能和技巧。4、培养团体协作精神,获得初步的网络编程应用经验,为以后从事生产和科研工作打下一定的基础.二、课程设计要求设计一个解析IP数

3、据包的程序。 捕获网络中数据包,并解析数据包的内容,加强对IP数据包的结构及IP协议的相关问题的理解,从而对IP层的工作原理有一个更为专业的了解和认识。三、预备知识互联网络层是TCP/IP协议参考模型中的关键部分.IP协议把传输层送来的消息组装成IP数据包,并把IP数据包传送给数据链层.IP协议在TCP/IP协议族中处于核心地位,IP协议制定了统一的IP数据包格式,以消除个通信子网中的差异,从而为信息发送方和接收方提供了透明的传输通道.编制本程序前,首先要对IP包的格式有一定了解,图1给出了IP协议的数据包格式.IP数据包的第一个字段是版本字段,其度是4位,表示所使用的IP协议的版本.目前的版

4、本是IPV4,版本字段的值是4,下一代版本是IPV6,版本字段值是6.本程序主要针对版本是IPV4的数据包的解析.报头标长字段为4位,它定义了以4B为一个单位的IP包的报文长度.报头中除了选项字段和填充域字段外,其他各字段是定长的.因此,IP数据包的头长度在2040B之间,是可变的.0 4 8 16 19 24 31版本报头标长服务类型总长度标识标志片偏移生存时间协议头校验和源IP地址目的IP地址选项填充域数据部分图1 IP数据包的格式服务类型字段共8位,用于指示路由器如何处理该数据包.该字段长度由4位服务类型(TOS)子域和3位优先级子域组成,1位为保留位,该字段结构如图2所示.B7 b6

5、b5 b4 b3 b2 b1 b0优先级DTRC0图2 服务类型字段结构优先级共有8种,优先级越高表明数据包越重要.表1中列出了各种优先级所代表的意义.表一 优先子域的说明位数(b7b6b5) 意义网络控制网络间控制重要(CRITIC/ECP)即时,优先011 即时010 立刻001 优先000 普通在4位服务类型子域中b4,b3,b2,b1分别表示D(延迟),T(吞吐量),R(可靠性)与C(成本).表2列出了服务器类型自域的构成.位数( b4b3b2b1)意义 1111 安全级最高 1000 延迟最小 0100 吞吐量最大 0001 金钱成本最小 0000 普通服务总长度字段为2B,它定义了

6、以字节为单位的数据包的总长度.IP数据包的最大长度为65535B.标识字段的长度为16位,用于识别IP数据包的编号.每批数据都要有一个标识值,用于让目的主机判断新来的数据属于哪个分组.报头中的标志字段如图7-3所示.标志字段共3位,最高位是0.禁止分片标志DF(do not fragment)字段的值若为1,表示不能对数据包分片;若DF值为0,则表明可以分片.分片标志MF(more fragment)的值为1,表示接收到的不是最后一个分片;若MF值为0,表示接收到的是最后一个分片.片偏移字段共13位,说明分片在整个数据包中的相对位置.片偏移值是以8B为单位来记数的,因此选择的分片长度应该是8B

7、的整数倍.生存时间(TTL)字段为8位,用来设置数据包在互联网络的传输过程的寿命,通常是用一个数据包可以经过的最多的路由器跳步数来限定的.协议字段为8位,表示使用此IP数据包的高层协议类型,常用的协议号如表7-3所示.序号协议名称序号协议名称12468ICMPIGMPIP inIPTCPEGP17414689UDPIPV6RSVPOSPFA表7-3 典型的协议号头校验和字段为16位,用于存放检查报头错误的校验码。检验的范围是整个IP包的报头。校验和按如下方法计算:1)将头校验和的字段置为0。2)将报头部分的所有数据以16位为单位进行累加,累加方式是求异或。3)将累加的结果取反码,就是头校验和。

8、 当收到一个IP包时,要检查报头是否出错,就把报头中的所有数据以16位为单位进行累加,若累加的结果为0,则报文没有出错。 地址字段包括源地址和目的地址。源地址和目的地址的长度都是32位,分别表示发送数据包的源主机和目的主机的IP地址。 选项字段的长度范围为040B,主要用于控制和测试。在使用选项字段的过程中,有可能出现报头部分的长度不是32位的整数倍的情况。如果出现这种情况,就需要通过填充位来凑齐。四、需求分析在传输路径中,路由器通常连接多个网络。不同的网络的数据链路层最大传输单元的长度可能不同,因此路由器在接受到数据包,并准备要转发到目的主机时,它必须首先决定要使用哪一个接口网络,要决定该网

9、络的数据链路层最大传输单元是否允许该数据包通过。根据数据包长度来确定是否需要对数据包进行分片。如果数据包来自一个能够通过较大数据包的局域网,又要通过另一个只能通过较小的数据包的局域网,那么就必须对IP数据包进行分片。在IP数据包分片时,首先要确定片长度。然后将原始IP数据包包括报头分成第1个片。如果剩下的数据仍然超过长度,那么需要进行第2个分片数据加上原来的报头,构成第2个片。这样一直分割到剩下的数据小于片长度为止。五、可行性分析(1)经济可行性适用本计算机安全系统可提高计算机通信流量分析和管理水平,把大量繁琐工作简单化,能够有效地节省人力物力,并能够准确地进行统计和计算,避免人工统计或计算所

10、带来的差错,保证计算机通信管理高效而有序地进行。(2)技术可行性本系统前台采用Microsoft公司的Visual C+6.0作为主要开发工具;该系统在安全、准确性和运行速度方面都有一定优势。六、设计基本思路IP数据报的格式说明IP协议都具有什么功能。其首部,版本目前广泛使用的版本号为4;首部长度站4bit;服务类型占8bit,其中服务类型TOS子域占4位,优先级子域占3位,另一位为保留位;总长度字段为2B,IP数据包的最大长度是65535B;标识占16bit,它是一个计数器,用来产生数据报的标识;标志占3bit,其中最低为为MF,MF=1时为后面“还有分片”,MF=0表示这是数据报片中的最后

11、一个,DF=0时,表示允许分片;片偏移以8个字节为偏移单位;生存时间字段记为TTL,单位为秒;协议段占8bit,用于指出次数据是使用何种协议,典型的协议号有6:TCP,17:UDP,1:ICMP。本程序使用套接字socket编程,将网卡设为能够接受流经网卡的所有类型的数据包。首先,初始化套接字,然后监听数据包,解析数据包。SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP)用来创建套接字,其参数为通信发生的区字段和套接字的类型。WSAIoctl(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLe

12、n)函数用来把网卡设置为混杂模式。recv(sock,buffer,65535,0)函数用来接收经过的IP包,其参数分别是套接字描述符,缓冲区的地址,缓冲区的大小。typedef struct IP_HEADip_head;用来定义IP头部数据。setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *)函数用来获取本机IP地址htons()函数将无符号短整型转换为网络字节顺序的数据本程序在windows环境下利用C+语言编写。七、方案设计程序流程框图: 生成输出文件创建原始套接字捕获IP数据包解析IP数据包结束开始八、程序代码#include #include

13、 #include #include#include #pragma comment(lib,ws2_32) /指定连接到网络应用和internet#define IO_RCVALL _WSAIOW(IOC_VENDOR,1) typedef struct IP_HEAD union /定义联合 unsigned char Version; unsigned char HeadLen; ; unsigned char ServiceType; unsigned short TotalLen; unsigned short Identifier; union unsigned short Fla

14、gs; unsigned short FragOffset; ; unsigned char TimeToLive; unsigned char Protocol; unsigned short HeadChecksum; unsigned int SourceAddr; unsigned int DestinAddr; unsigned char Options; ip_head; /定义IP头部的数据结构void main(int argc,char *argv) using namespace std; ofstream outfile(C:logfile.txt,ios:out);if

15、(argc!=2) coutendl请以下格式输入命令行:PackParse packet_sumendl; return; WSADATA WSAData; if(WSAStartup(MAKEWORD(2,2), &WSAData)!=0) coutendlWSASTartup初始化失败endl; return; SOCKET sock=socket(AF_INET,SOCK_RAW,IPPROTO_IP); /三个参分别为通信发生的区字段,套接字的类型,与IP协议if(sock=INVALID_SOCKET) coutendl创建Socket失败!endl; closesocket(so

16、ck); WSACleanup(); BOOL flag=TRUE; if(setsockopt(sock,IPPROTO_IP,IP_HDRINCL,(char *) &flag,sizeof(flag)=SOCKET_ERROR) coutendlsetsockopt操作失败:WSAGetLastError()endl; closesocket(sock); WSACleanup(); char hostName128;/获取主机名 if(gethostname(hostName,100)=SOCKET_ERROR) coutendlgethostname操作失败:WSAGetLastEr

17、ror()endl; closesocket(sock); WSACleanup(); hostent *pHostIP; /获取本地IPif(pHostIP=gethostbyname(hostName)=NULL) coutendlgethostbyname操作失败:WSAGetLastError()h_addr_list0; if(bind(sock,(PSOCKADDR)&host_addr,sizeof(host_addr)=SOCKET_ERROR) coutendlbind操作失败:WSAGetLastError()endl; closesocket(sock); /绑定网卡WS

18、ACleanup(); DWORD dwBufferLen10; DWORD dwBufferInLen=1; DWORD dwBytesReturned=0; if(WSAIoctl(sock , IO_RCVALL ,&dwBufferInLen , sizeof(dwBufferInLen) , &dwBufferLen,sizeof(dwBufferLen),&dwBytesReturned,NULL,NULL)=SOCKET_ERROR) coutendlWSAIoctl操作失败:WSAGetLastError()endl; closesocket(sock); /将网卡设为混杂模式

19、,以接受所有数据WSACleanup(); coutendl开始解析IP包:endl; char buffer65535; /设置缓冲区int packsum=atoi(argv1); /字符串转换为整形for(int i=0;i0) /四个参数分别是套接字描述符,缓冲区的地址,缓冲区大小,附加标志 ip_head ip=*(ip_head *)buffer; cout-endl; cout版本:4)endl; /获取头部长度字段cout头部长度:(ip.HeadLen &0x0f)*4)endl; /获取头部长度字段cout服务类型:Priority5), Service1)&0x0f)en

20、dl; /优先级子域和TOS子域cout总长度:ip.TotalLenendl;/获取总长度字段 cout标识符:ip.Identifierendl;/获取标识字段 cout标志位:15)&0x01),DF= 14)&0x01),Mf=13)&0x01)endl; /获得标志字段cout片偏移:(ip.FragOffset&0x1fff)endl; /获取分段偏移字段cout生存周期:(int)ip.TimeToLiveendl; /获取生存时间字段cout协议:Protocol(int)ip.Protocolendl; /获取协议字段cout头部校验和:ip.HeadChecksumendl

21、; /获取头校验和字段cout原地址:inet_ntoa(*(in_addr *)&ip.SourceAddr)endl; /获取源IP地址字段cout目的IP地址:inet_ntoa(*(in_addr *)&ip.DestinAddr)endl; /获取目的IP地址字段outfile-endl; outfile版本:4)endl; outfile头部长度:(ip.HeadLen &0x0f)*4)endl; outfile服务类型:Priority5), Service1)&0x0f)endl; outfile总长度:ip.TotalLenendl; outfile标识符:ip.Ident

22、ifierendl; outfile标志位:15)&0x01),DF= 14)&0x01),Mf=13)&0x01)endl; outfile片偏移:(ip.FragOffset&0x1fff)endl; outfile生存周期:(int)ip.TimeToLiveendl; outfile协议:Protocol(int)ip.Protocolendl; outfile头部校验和:ip.HeadChecksumendl; outfile原地址:inet_ntoa(*(in_addr *)&ip.SourceAddr)endl; outfile目的IP地址:inet_ntoa(*(in_addr *)&ip.DestinAddr)endl; closesocket(sock); WSACleanup(); 九、调试程序程序运行结果截图:(1)运行程序:(2)输入数据:(3)显示结果:同时,在程序指定磁盘目录下生成了名为file1的t

温馨提示

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

评论

0/150

提交评论