欢迎来到天天文库
浏览记录
ID:52698888
大小:43.50 KB
页数:4页
时间:2020-03-29
《网络协议试验报告6.doc》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、《网络协议分析》实验报告2011至2012学年第1学期姓名系别计算机实验地点学号年级班试验时间2011年10月6日实验项目实验六基于ICMP协议的ping程序设计实验一、实验目的1.分析ICMP协议报文,理解和掌握ICMP协议报文头各字段的含义和作用;2.熟悉原始套接字编程;了解网络结构与网络传输底层协议。二、实验环境连通的局域网络、若干PC机、WindowsXP/2000等操作系统、VisualC等编程软件等。三、实验原理1.PING的工作原理PING利用ICMP协议包来侦测另一个主机是否可达。其原理是用类型码为8的ICMP发请求,受到请求的主机则用类型码
2、为0的ICMP回应。2.RAW模式的SOCKET编程为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。3.ICMP协议位于网络层的IP协议是一个无连接的协议,它不会处理网络层传输中的故障,而位于网络层的ICMP协议却恰好弥补了IP的缺限,它使用IP协议进行信息传递,向数据包中的源端节点提供发生在网络层的错误信息反馈。四.实验内容及步骤及注意点实验内容:1.掌握ICMP协议报文格式和各字段含义;2.在WINDOWS环境下设计与实现基于ICMP协议的PING程序,该程序可以用于测试网络连通性。具体要求如下:在命令提示符下输入:PIN
3、G***.***.***.***,其中***为目的主机的IP地址;不要求支持域名,对是否带有开关变量也不做要求,当不带开关变量时,要求返回4次响应。返回信息的格式:REPLYFROM***.***.***.***或REQUESTTimeOut(无法PING通的情况)。实验步骤及注意点:1.熟悉IP以及ICMP协议的工作机制;2.熟悉RAW模式的SOCKET编程;3.编写PING的实现程序;4.在模拟实现环境下调试并运行自己编写的PING程序;5.编译环境中需要包括SOCKET库WS2_32.lib。voidPing(LPCSTRpstrHost){SOCKE
4、TrawSocket;LPHOSTENTlpHost;sockaddr_insaDest;sockaddr_insaSrc;DWORDdwTimeSent;DWORDdwElapsed;u_charcTTL;intnLoop;intnRet;//创建一个原始套接口rawSocket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP);if(rawSocket==SOCKET_ERROR){ReportError("socket()");return;}//根据主机名查询主机地址lpHost=gethostbyname(pstrHost
5、);if(lpHost==NULL){fprintf(stderr,"Hostnotfound:%s");return;}//设置目标套接口地址saDest.sin_addr.s_addr=*((u_longFAR*)(lpHost->h_addr));saDest.sin_family=AF_INET;saDest.sin_port=0;//输出Ping程序的提示信息printf("Pinging%s[%s]with%dbytesofdata:",pstrHost,inet_ntoa(saDest.sin_addr),REQ_DATASIZ
6、E);//控制Ping执行的次数for(nLoop=0;nLoop<4;nLoop++){SendEchoRequest(rawSocket,&saDest);//使用select()等待接收回送的数据nRet=WaitForEchoReply(rawSocket);if(nRet==SOCKET_ERROR){ReportError("select()");break;}if(!nRet){printf("TimeOut");//输出超时提示break;}//接收应答dwTimeSent=RecvEchoReply(rawSocket,&saSrc,&
7、cTTL);//计算传输时间dwElapsed=GetTickCount()-dwTimeSent;printf("Replyfrom:%s:bytes=%dtime=%ldmsTTL=%d",inet_ntoa(saSrc.sin_addr),REQ_DATASIZE,dwElapsed,cTTL);printf("");}nRet=closesocket(rawSocket);if(nRet==SOCKET_ERROR){ReportError("closesocket()");}}intSendEchoRequest(SOCKETs,LPSOC
8、KADDR_INlpstToAddr)//给目标站点
此文档下载收益归作者所有