计算机网络课程报告范文_第1页
计算机网络课程报告范文_第2页
计算机网络课程报告范文_第3页
计算机网络课程报告范文_第4页
计算机网络课程报告范文_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、课程设计(论文)任务书学院专业班一、课程设计(论文)题目计算机网络课程设计二、课程设计(论文)工作自2021年6月日起至2021年6月日止.三、课程设计(论文)地点:四、课程设计(论文)内容要更1 .本课程设计的目的通过课程设计,使学生理论联系实际,在实践中进一步了解计算机网络体系结构,深入理解TCP/IP参考模型,掌握各种网络工程技术和网络规划与设计,初步掌握综合布线技术、高速局域网技术、广域网接入技术、网络互联技术,初步掌握网络应用程序开发技术以及互联网的应用技术.培养学生分析、解决问题的水平,提升学生的科技论文写作水平.2 .课程设计的任务及要求1)根本要求:(1)熟悉交换机、路由器等网

2、络设备的功能和使用;(2)掌握网络规划与设计,掌握网络平安与治理技术;(3)初步掌握网络应用程序设计技术和互联网应用技术.2)课程设计论文编写要求(1)理论设计局部以课程设计论文的形式提交,格式必须根据课程设计论文标准格式进行书写和装订.(2)课程设计报告(论文)包括目录、绪论、正文、设计小结、参考文献、附录等3)课程设计评分标准:(1)考勤与学习态度:20分(2)理论理解与课程设计报告论文:40分;(3)动手操作与实验设计:20分;(4)设计论文辩论:20分.4)参考文献:(1)?计算机网络(第四版)?主编:谢希仁出版社:电子工业出版社出版时间:2004年7月(2)?计算机网络课程设计?主编

3、:吴功宜胡晓英张仁何云王宁出版社:机械工业出版社出版或修订时间:2005年9月(3)?计算机网络设计?主编:易建勋出版社:人民邮电出版社出版或修订时间:2007年10月5课程设计进度安排1.选择设计题目、了解设计目的要求、查阅相关理论资料1图书馆、机房2.设计方案选型及实验室完成相关的设计任务2天实验室3.总结课程设计任务和设计步骤,撰写课程设计论文2天图书馆、机房、实验室学生签名:2021年6月18日6选择课程设计题目具体要求:用winsock设计Ping应用程序理解winsock技术网络编程技术,分析PING应用程序设计原理和程序流程,选择适宜的开发环境,参考已有的PING程序功能,设计实

4、现ping功能的应用程序.设计论文要求:1分析winsock编程技术;2分析ping程序的功能及其相关网络协议;3给出ping程序流程图和设计方案;4选择开发环境,编译源程序;5给出软件测试文档;6设计小结;7参考文献包括互联网上的引用信息.()1考勤与学习态度20分:优、良、中、一般、差();2理论理解与课程设计报告论文40分:优、良、中、T、差;3动手操作与实验设计20分、f(1、差;4设计论文辩论20分:优、良、中、一般、差;(5)职称:讲师2021年6月24日1 .绪论.01.1. 课程设计的目的及意义01.2. 课程设计的任务及要求01.3. 课程设计题目具体要求02 .Winsoc

5、k编程技术1.2.1. Winsock的根本概念12.2. Winsock编程的特点12.3. Winsock根本的API13 .ping程序的功能及其相关网络协议5.3.1. ping程序的功能53.2. ping的相关协议54 .ping程序的设计方案6.4.1. ping程序的工作流程64.2. 选择开发环境,编译源程序75 .软件测试1.26 .设计小结1.27 .参考文献1.41 .绪论1.1. 课程设计的目的及意义通过课程设计,使学生理论联系实际,在实践中进一步了解计算机网络体系结构,深入理解TCP/IP参考模型,掌握各种网络工程技术和网络规划与设计,初步掌握综合布线技术、高速局域

6、网技术、广域网接入技术、网络互联技术,初步掌握网络应用程序开发技术以及互联网的应用技术.培养学生分析、解决问题的水平,提升学生的科技论文写作水平.1.2. 课程设计的任务及要求1根本要求:1熟悉交换机、路由器等网络设备的功能和使用;2掌握网络规划与设计,掌握网络平安与治理技术;3初步掌握网络应用程序设计技术和互联网应用技术.2课程设计论文编写要求1理论设计局部以课程设计论文的形式提交,格式必须根据课程设计论文标准格式进行书写和装订.2课程设计报告论文包括目录、绪论、正文、设计小结、参考文献、附录等1.3. 课程设计题目具体要求用winsock设计Ping应用程序:理解winsock技术网络编程

7、技术,分析PING应用程序设计原理和程序流程,选择适宜的开发环境,参考已有的PING程序功能,设计实现ping功能的应用程序.设计论文要求:1分析winsock编程技术;2分析ping程序的功能及其相关网络协议;3给出ping程序流程图和设计方案;4选择开发环境,编译源程序;5给出软件测试文档;6设计小结;7参考文献包括互联网上的引用信息.2. Winsock编程技术2.1. Winsock的根本概念Socket在英文中是插座的意思,他的设计者实际上是暗指插座.由于在Socket环境下编程很像是模拟打,Internet的IP地址就是号,要打,需要插座,在程序中就是向系统申请一个Socket,以

8、后两台机器上的程序“交谈都是通过这个Socket来进行的.对程序员来说,也可以把Socket看成一个文件指针,只要向指针所指的文件读写数据,就可以实现双向通信.利用Socket进行通信,有两种主要的方式.第一种是面向连接的流方式.顾名思义,在这种方式下,两个通信的应用程序之间要先建立一种连接链路,具过程好似在打.一台计算机()要想和另一台计算机()进行数据传输(通话),必须先获得一条链路,只有确定了这条通路之后,数据(通话)才能被正确接受和发送.这种方式对应的是TCPB议.第二种叫做无连接的数据报文方式,这时两台计算机像是把数据放在一个信封里,通过网络寄给对方,信在传输的过程种有可能会残缺不全

9、,而且后发出的信也有可能会先收到,它对应的是UDPft、议.流方式的特点是通信可靠,对数据有校验和重发机制,通常用来做数据文件的传输,如FTRTelnet等;数据报文方式由于取消了重发校验机制,能够打到较高的通信速率,可以用于数据可靠性要求不高的通信,如实时的语音、图像传送和关波消息等.在ISO的OSI网络七层协议中,Winsock主要负责的是限制数据的输入和输出,也就是传输层和网络层.Winsock屏蔽了数据链路层和物理层,它的出现给Windows下的网络编程带来了巨大的变化.2.2. Winsock编程的特点在网络通信中,由于网络拥挤或一次发送的数据量过大等原因,经常会发生交换的数据在短时

10、间内不能传送完,收发数据的函数因此不能返回的现象,这种现象叫做阻塞.Winsock对有可能阻塞的函数提供了两种处理方式一一阻塞和非阻塞方式.在阻塞方式下,收发数据的函数在被调用后一直要到传送完毕或者出错才能返回;在阻塞期间,除了等待网络操作的完成不能进行任何操作.对于非阻塞方式,函数被调用后立即返回;当网络操作传送完成后,由Winsock给应用程序发送一个消息,通知操作完成,此时可以根据发送的消息的参数判断操作是否正常.在编程时,应尽量使用非阻塞方式.由于在阻塞方式下,用户可能会由于长时间的等待而失去耐心继而关闭应用程序的主窗口,这样当网络操作的函数从Winsock的动态链接库中返回时,主程序

11、已经从内存中删除,可能会造成内存的异常,虽然现在的操作系统已经可以从系统级正确地处理这种内存问题,但还是建议这种情况的发生.2.3. Winsock根本的API(1)WSAStartup():初始化.函数原型:IntPASCALFARWSAStartup(WORDwVersionRequested,LPWSDATAlpWSAData);WindowsSocket由DLL形式提供,为了完成一系列初始化操作,每一个使用WindowsSocket的应用程序都必须进行WSASstartup()函数调用,并只有在成功地完成调用之后才能使用Socketo其中参数wVersionRequested表示欲使用

12、的WindowsSocketAPI的版本:这是一个WORD型的整数,它的高位字节定义是次版本号,低位字节定义的是主版本号.IpWSAData指向WSADA做料的指针.成功返回0.(2)socket();创立一个Socket.函数原型:SOCKETsocketintaf,inttype,intproctocol);所有的通信在建立之前都要创立一个Socket,该函数的功能与文件操作中的fopen类似.Af值addressfamily(地址族),一般都填AF_INET表示是在Internet上的Socket;type是Socket的类型,当采用流连接方式时用SOCK_STREAM数据报文方式时用S

13、OCK_DGRAProctocol一般都为0,表示用对两种类型的Socket分别采用缺省的TC讲口UDP专输协议.函数的返回值是由Winsock订id一种数据类型SOCKET它实际上就是个整型数据在Socket创立成功时,代表Winsock分配给程序的Socket编号,后面调用传输函数时,就可以把它像文件指针一样引用.如果Socket建立失败,返回值为INVALID_SOCKET(3)bind();创立的Socket指定通信对象.函数原型:Intbind(SOCKETs,conststructsocketsockaddr_in*addr,intaddrlen);创立了Socket之后,就应该选

14、定通信的对象.首先是自己的程序要与网上的哪台计算机通话;其次,在多任务的系统下,该计算机上可能会有几个程序在工作,必须指出要与哪个程序通信.前者可以通过Internet的网络IP地址来确定,而后者是通过端口号来确定.用端口号来表示同一台计算机上不同的应用程序,端口号可以为065536,不同功能的通信程序使用不同的端口号,这样一台计算机上可以有几个程序同时使用一个IP地址通信而不互相干扰,IP地址与端口号的关系好似是总机号与分机号的关系一样.listen():设置等待连接状态.函数原型:Intlisten(SOCKETs,intbacklog);对于效劳器的程序,当中请到Socket,并指定通信

15、对象为INADDR_ANY后,就应该等待一个客户机的程序来要求连接.Listen()就是一个把一个Socket设置这种状态的函数.参数backlog是等待连接的队列长度,可取15.如果当某个客户程序要求连接时,效劳器已与其他客户程序连接,那么后来的连接请求会被放在队列中,等待效劳器空闲的时候再与之连接.当队歹J到达指定的长度(backlog的值)时,再来的连接请求都将被拒绝.(5)accept():接受连接请求.函数原型:SOCKETaccept(SOCKETs,structsockaddr_in*addr,int*addrlen);当没有连接请求时,对于阻塞方式,就进入等待状态,直至有一个请

16、求到达为止.Accept()在接受到连接请求之后,会为这个连接建立一个新的Socket来与对方通信,并把它作为返回值.新建的Socket与原来的Socket有相同的特性,包括端口号.原来的Socket被释放,用于继续等待其他的连接请求,而生成的Socket才是与客户端进行通信的实际Socketo所以一般将参数中的SOCKET作“监听"Socket,它只负责接受连接,而不负责通话;而对于accept函数返回的SOCKET把它称作“会话Socket,它只负责与客户端通话.参数中的指针addr和addlen用来返回客户机的sockaddr-in结构体,够过addr可得到客户机的IP地址和连

17、接端口.注意:bind()、listen()和accept()函数一般都用于效劳程序,属于被动等待点函数,要进行主动的连接需要利用connect()函数.函数原型:Intconnect(SOCKETs,structsockaddr_in*name,intnamlen)其中s是刚刚建立的Socket,name与namelen的含义与使用方法与bind()相同,用来指定通信对象.连接失败该函数会返回SOCKET-ERROR.(6)send()/recv():发送、接收数据.函数原型:Intsend(SOCKETs,char*buf,intlen,intflags)Intrecv(SOCKETs,c

18、har*buf,intlen,intflags)S是连接用的.Socket>buf和len是发送或接收的的数据包及其长度,参数flags一般取0.recv()函数实际上是读取send()函数发过来的一个数据包.当读到的数据字节少于规定接收的数目时,就把数据全部接收,并返回实际接收到的字节数,当读到的数据多于规定值时,在流方式下剩余的数据由下个recv()读出,在数据报文方式下多余的数据将被丢弃.这两个函数在出错时都返回SOCKET_ERROR以数据报文方式通信的Socket,由于事先不用建立连接,所以可以跳过connect()而直接用recvfrom和sendto两个函数通信:Intre

19、cvfrom(SOCKETs,char*buf,intlen,intflags,structsocket_infrom,int*fromlen);Intsendto(SOCKETs,char*buf,intlen,intflags,structsockaddr_into,int*tolen)其中from、fromlen、to、tolen的含义和用法与bind()和connect()中的相同,分别表示接收和发送数据的对象.closesocket():关闭socket.函数原型:Closesocket(SOCKETs);通信结束,关闭指定的Socketo以上API在调用时的过程如下:Server端

20、Client端图1面向连接的流方式过程图2面向无连接的数据报过程3. ping程序的功能及其相关网络协议3.1. ping程序的功能Ping程序通过主机向远程计算机发出ICMP回显请求,远程计算机拦截这个请求,然后生成一条回显应答消息,通过网络传给主机.但是如果由于一些原因造成不能抵达目标主机,就会生成对应的ICMP错误消息,由原来打算建立通信的那个路径上某处的一个路由器返回.如果与远程主机的物理性连接并不存在问题,但是远程主机已经关机或没有设置对网络时间的做出相应,便需由自己的程序来执行超时检测,侦测出这样的情况.以检查网络是否能够连通,从而可以很好地帮助我们分析判定网络故障.它所利用的原理

21、是这样的:网络上的机器都有唯一确定的IP地址,根据缺省设置,Windows上运行的Ping命令给目标IP地址发送4个ICMP网间限制报文协议回送请求,每个32字节数据,如果一切正常,应能得到4个回送应答.根据返回的数据包我们可以确定目标主机的存在以及是否可达.在本程序中,可以通过两种方式测试目标主机的连通性:通过ip地址或者主机名.前者较简单,假设通过主机名测试连通性的话,首先要通过数据库中的地址主机名表查询并解析其对应的ip地址,然后进一步测试连通性.如果可以正常连通,那么根据先后的顺序返回4个应答帧,显示所用的时间,并且提示完成ping测试.另外还可以通过复选框简单的记录路由器的情况.如果

22、不能正常连通,那么显示timeout,并提示测试完成.3.2. ping的相关协议支持Ping的协议中ICMP是最关键的一个.ICMP全称InternetControlMessageProtocol网际限制信息协议.在网络体系结构的各层次中,都需要限制,而不同的层次有不同的分工和限制内容,IP层的限制功能是最复杂的,主要负责过失限制、拥塞限制等,任何限制都是建立在信息的根底之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取过失信息并处理.为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报

23、文,报告出错信息,让信源主机采取相应处理举措,它是一种过失和限制报文协议,不仅用于传输过失报文,还传输限制报文.ICMP报文包含在IP数据报中,属于IP的一个用户,IP头部就在ICMP报文的前面,所以一个ICMP®文包括IP头部、ICMP头部和ICMP报文,IP头部的Protocol值为1就说明这是一个ICMP报文,ICMP头部中的类型Type域用于说明ICMP报文的作用及格式,此外还有一个代码Code域用于详细说明某种ICMP报文的类型,所有数据都在ICMP头部后面.常见的ICMP报文主要有:响应请求目标不可到达、源抑制和超时报文,以及时间戳.4. ping程序的设计方案5. 1.

24、ping程序的工作流程设计方案:(1)ping两台主机要发送消息,源主机要有发送区和接收区,因此要为send_buf和recv_buf分配内存;(2)创立icmp的包头;(3)编写算法用于计算icmp包的校验和,但在校验之前务必将icmp包头的checksum字段置为0;(4)初始化rawsocket,设置ttl,初始化dest,如果返回值为0表示失败;(5)初始化icmp的包头,给data局部填充数据,最后计算整个包的检验和;(6)发送生成的icmp包,返回值小于0,表示失败;接收icmp包,返回值小于0,表示失败;(8)对收到的icmp解码,如果返回值为-2,表示忽略,-1表示失败,0表示

25、成功;(9)工作结束,显示运行Ping命令的统计结果.6. 2.选择开发环境,编译源程序我选择了VC6.0的开发环境,并且创立工程ping和cpp文件iping.cpp,并由以下代码编译出可执行文件iping.exe./aprogamwrittenby225#pragmacomment(lib,"ws2_32.lib")#pragmapack(4)/总节对齐#include"winsock2.h#include"stdlib.h"#include"stdio.h"# defineICMP_ECHO8/ICMP回显请求#def

26、ineICMP_ECHOREPLY0/ICMP回显应答# defineICMP_MIN8/ICMP数据包最短为8个字节/定义IP头部typedefstructiphdrunsignedinth_len:4;/头部长unsignedintversion:4;/版本号unsignedchartos;/月艮务类型unsignedshortident;/标识unsignedshorttotal_len;/总长度unsignedshortfrag_and_flags;版志unsignedcharttl;/件存时间unsignedcharproto;/上层协议unsignedshortchecksum;校

27、验和unsignedintsourceIP;颁IPunsignedintdestIP;/B的IPIpHeader;/定义ICMP头部typedefstructicmphdrBYTEi_type;类型BYTEi_code;代码USHORTi_cksum;/校验和USHORTi_id;/标识USHORTi_seq;/吐歹U号ULONGtimestamp;/数据IcmpHeader;# defineSTATUS_FAILED0xFFFF#defineDEF_PACKET_SIZE32/# defineDEF_PACKET_NUMBER4/默认发送ICMP请求的次数#defineMAX_PACKET1

28、024/数据包最大长度#definexmalloc(s)HeapA110c(GetProcessHeap(),HEAP_ZERO_MEMORY,(s)分配内存#definexfree(p)HeapFree(GetProcessHeap(),0,(p)解放内存/填充icmp数据包voidfill_icmp_data(char*,int);/计算校验和USHORTchecksum(USHORT*,int);/收到数据后解码intdecode_resp(char*,int,structsockaddr_in*);/提示用户该程序使用方法voidUsage(char*progname)fprintf(

29、stderr,"t命令所在目录:n");fprintf(stderr,"t%sn",progname);printf("t你需要在cmd中进入该目录直接使用iping指令,例如:ipingbaidun");ExitProcess(STATUS_FAILED);intmain(intargc,char*argv)system("cls");printf("nnn=AsmallprogramwritenbyXXXXXXXX=n");WSADATAwsaData;/创始化windowssocket需要

30、的参数SOCKETsockRaw;原始套接字structsockaddr_indest,from;/源、目的IP地址structhostent*hp;/旨针指向包含主机名、地址列表等信息的结构体intbread,datasize,times;intfromlen=sizeof(from);inttimeout=1000;/超时时间1000msintstatistic=0;/用于统计char*dest_ip;char*icmp_data;char*recvbuf;unsignedintaddr=0;USHORTseq_no=0;if(WSAStartup(MAKEWORD(2,1),&w

31、saData)!=0)fprintf(stderr,"WSAStartupfailed:%dn",GetLastError();ExitProcess(STATUS_FAILED);/使用方法不对时显示提示信息if(argc<2)Usage(argv0);/创立原始套接字sockRaw=WSASocket(AF_INET,SOCK_RAW,IPPROTO_ICMP,NULL,0,WSA_FLAG_OVERLAPPED);/注:为"用发送接收超时设置(即设置SO_RCVTIMEO,SO_SNDTIMEO),/必须将标志位设为WSA_FLAG_OVERLAPPE

32、D!/创立原始套接字不成功if(sockRaw=INVALID_SOCKET)fprintf(stderr,"WSASocket()failed:%dn",WSAGetLastError();ExitProcess(STATUS_FAILED);/设定发送超时时间bread=setsockopt(sockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout,sizeof(timeout);if(bread=SOCKET_ERROR)fprintf(stderr,"failedtosetrecvtimeout:%dn"

33、;,WSAGetLastError();ExitProcess(STATUS_FAILED);/设定接收数据超时时间timeout=1000;bread=setsockopt(sockRaw,SOL_SOCKET,SO_SNDTIMEO,(char*)&timeout,sizeof(timeout);if(bread=SOCKET_ERROR)fprintf(stderr,"failedtosetsendtimeout:%dn",WSAGetLastError();ExitProcess(STATUS_FAILED);memset(&dest,0,sizeo

34、f(dest);/解析用户输入的目标地址hp=gethostbyname(argv1);if(!hp)addr=inet_addr(argv1);datasize=atoi(argv3);)/非法输入if(!hp)&&(addr=INADDR_NONE)fprintf(stderr,"Unabletoresolve%sn",argv1);ExitProcess(STATUS_FAILED);)/记录目标主机信息的结构体/地址if(hp!=NULL)memcpy(&(dest.sin_addr),hp->h_addr,hp->h_lengt

35、h);elsedest.sin_addr.s_addr=addr;/协议族if(hp)dest.sin_family=hp->h_addrtype;elsedest.sin_family=AF_INET;/目标IPdest_ip=inet_ntoa(dest.sin_addr);/除了目标地址,还给出了Ping的次数if(argc>2)times=atoi(argv2);if(times=0)times=DEF_PACKET_NUMBER;)elsetimes=DEF_PACKET_NUMBER;/还给出了数据大小if(argc>3)/给的是0,那么用默认数据包大小if(da

36、tasize=0)datasize=DEF_PACKET_SIZE;/用户给出的数据包大小太大if(datasize>1024)fprintf(stderr,"WARNING:data_sizeistoolarge!n");datasize=DEF_PACKET_SIZE;)elsedatasize=DEF_PACKET_SIZE;datasize+=sizeof(IcmpHeader);icmp_data=(char*)xmalloc(MAX_PACKET);recvbuf=(char*)xmalloc(MAX_PACKET);if(!icmp_data)fprin

37、tf(stderr,"HeapA110cfailed%dn",GetLastError();ExitProcess(STATUS_FAILED);)memset(icmp_data,0,MAX_PACKET);/填充ICMP数据包,类型、代码、标识等fill_icmp_data(icmp_data,datasize);/提示正在ping目标主机fprintf(stdout,nPinging%s.nn,dest_ip);/Ping屡次for(inti=0;i<times;i+)intbwrote;/准备ICMP包头部数据(IcmpHeader*)icmp_data)-&

38、gt;i_cksum=0;/取得以毫秒为单位的计算机启动后经历的时间问隔(IcmpHeader*)icmp_data)->timestamp=GetTickCount();(IcmpHeader*)icmp_data)->i_seq=seq_no+;/序歹!J号递增(IcmpHeader*)icmp_data)->i_cksum=checksum(USHORT*)icmp_data,datasize);/计算校验和一/发送ICMP数据包bwrote=sendto(sockRaw,icmp_data,datasize,0,(structsockaddr*)&dest,s

39、izeof(dest);/发送失败if(bwrote=SOCKET_ERROR)if(WSAGetLastError()=WSAETIMEDOUT)printf("Requesttimedout.n");continue;fprintf(stderr,"sendtofailed:%dn",WSAGetLastError();ExitProcess(STATUS_FAILED);if(bwrote<datasize)fprintf(stdout,"Wrote%dbytesn",bwrote);recvfrom(sockRaw,re

40、cvbuf,MAX_PACKET,0,(structsockaddr*)&from,&fromlen);/接收失败if(bread=SOCKET_ERROR)if(WSAGetLastError()=WSAETIMEDOUT)printf("Requesttimedout.n");continue;fprintf(stderr,"recvfromfailed:%dn",WSAGetLastError();ExitProcess(STATUS_FAILED);/成功解码if(!decode_resp(recvbuf,bread,&f

41、rom)statistic+;记录成功接收响应数据包的次数Sleep(1000);/统计运行Ping命令的统计结果fprintf(stdout,"nPingstatisticsfor%sn",dest_ip);fprintf(stdout,"Packets:Sent=%d,Received=%d,Lost=%d(%2.0f%loss)n",times,statistic,(times-statistic),(float)(times-statistic)/times*100);printf("n=AsmallprogramwritenbyXXX

42、XXXXX=n");WSACleanup();return0;/接收应答数据bread=/收到响应IP数据包后,对其进行解码intdecode_resp(char*buf,intbytes,structsockaddr_in*from)(IpHeader*iphdr;IcmpHeader*icmphdr;unsignedshortiphdrlen;iphdr=(IpHeader*)buf;iphdrlen=(iphdr->h_len)*4;头部占几个节字节一if(bytes<iphdrlen+ICMP_MIN)printf("Toofewbytesfrom%sn

43、",inet_ntoa(from->sin_addr);)一一/找到ICMP数据包开始的地方icmphdr=(IcmpHeader*)(buf+iphdrlen);if(icmphdr->i_type!=ICMP_ECHOREPLY)fprintf(stderr,"non-echotype%drecvdn",icmphdr->i_type);return1;)/是不是发给本程序的数据包if(icmphdr->i_id!=(USHORT)GetCurrentProcessId()fprintf(stderr,"someoneelse

44、''spacket!n");return1;)printf("%dbytesfrom%s:",bytes,inet_ntoa(from->sin_addr);printf("icmp_seq=%d.",icmphdr->i_seq);printf("time:%dms",GetTickCount()-icmphdr->timestamp);发送到接收过程的经历的时间printf("n");return0;)/计算校验和USHORTchecksum(USHORT*buffe

45、r,intsize)unsignedlongcksum=0;while(size>1)cksum+=*buffer+;size-=sizeof(USHORT);)if(size)cksum+=*(UCHAR*)buffer;)cksum=(cksum>>16)+(cksum&Oxffff);cksum+=(cksum>>16);return(USHORT)(cksum);)/填充ICMP数据包voidfill_icmp_data(char*icmp_data,intdatasize)IcmpHeader*icmp_hdr;char*datapart;icmp_hdr=(IcmpHeader*)icmp_data;icmp_hdr->i_type=ICMP_ECHO;icmp_hdr->i_code=0;icmp_hdr->i_id=(USHORT)GetCurrentProcessId();icmp_hdr->i_cksum=0;ic

温馨提示

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

评论

0/150

提交评论