为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

PING程序的设计-课程设计

2018-01-16 12页 doc 29KB 27阅读

用户头像

is_337177

暂无简介

举报
PING程序的设计-课程设计PING程序的设计-课程设计 1 ping设计任务目的及要求 5 1.1 设计目的 5 2 ping工作原理及设计方案 5 2.1 设计思路 5 2.3 设计流程图 6 2.4 设计方案 6 3 ping核心程序 7 4 ping实验结果 10 5 总结 11 一、 实验目的 PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。 课程设计中选取PIN...
PING程序的设计-课程设计
PING程序的设计-课程设计 1 ping设计任务目的及要求 5 1.1 设计目的 5 2 ping工作原理及设计 5 2.1 设计思路 5 2.3 设计流程图 6 2.4 设计方案 6 3 ping核心程序 7 4 ping实验结果 10 5 总结 11 一、 实验目的 PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。 课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现,对网络的实现机制有进一步的认 识。 二、 实验内容和要求 1、RAW模式的SOCKET编程 PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。 熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等; 2、具体内容 1) 定义数据结构 需要定义好IP数据报、ICMP包等相关的数据结构; 2) 程序实现 在WINDOWS环境下实现PING程序; 3) 程序要求 在命令提示符下输入: PING ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ 其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不 做要求。不带开关变量时,要求返回4次响应。 返回信息的格式: REPLY FROM ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ 或 REQUEST TimeOut (无法PING通的情况)。 三、 实验主要仪器设备和材料 联网计算机。 四、 实验方法、步骤及结构测试 实验按下述步骤进行: 1) 熟悉IP以及ICMP协议的工作机制 2) 熟悉RAW模式的SOCKET编程 3) 编写PING的实现程序 4) 编译环境中需要包括SOCKET库 WS2_32.lib 5) 在模拟实现环境下调试并运行自己编写的PING程序 6) 保留你实现的程序在你的用户目录下,以备辅导教师检查 7) 最后提交源程序,撰写实验报告 五、 课程设计进程安排 序号 设计各阶段内容 地点 起止日期 1 选择课程设计目,分析题目要求及熟悉实验软件。 实验2号楼202 2008.12.22 2 查阅资料,提出设计方案并讨论。 图书馆 2008.12.23 3 进行编译并调试程序 实验2号楼202 2008.12.24 4 调试程序、改进 实验2号楼202 2008.12.25 5 检查 实验2号楼202 2008.12.26 六、 应收集的资料及主要参考文献 1. 程良伦主编,《网络工程概论》,机械工业出版社. 2007 2. 苏峰,黄金双,汤蕾编著,《Visual C++.NET编程实例》,清华大学出版社.2004 3. 黄嘉辉编著,《Internet与TCP/IP程序设计之C++ Builder高手》,清华大学出版社.2001 发出任务书日期: 2008年 12月 22日 指导教师签名: 完成日期: 2008年 12月 29日 基层教学单位责任人 签章: 主管院长签章: 1 ping设计任务目的及要求 1.1 设计目的 PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。 课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的认 识。 1.2 设计要求 1、RAW模式的SOCKET编程 PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。 熟悉SOCKET的编程,包括基本的系统调用如SOCKET、BIND等; 2、具体内容 1)定义数据结构 需要定义好IP数据报、ICMP包等相关的数据结构; 2)程序实现 在WINDOWS环境下实现PING程序; 3)程序要求 在命令提示符下输入: PING ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ 其中ΧΧΧ为目的主机的IP地址,不要求支持域名,对是否带有开关变量也不 做要求。不带开关变量时,要求返回4次响应。 返回信息的格式: REPLY FROM ΧΧΧ.ΧΧΧ.ΧΧΧ.ΧΧΧ 或 REQUEST TimeOut (无法PING通的情况)。 2 ping工作原理及设计方案 2.1 设计思路 由于PING是基于ICMP协议,因此需要使用windows socket中的RAW模式进行编程。首先要定义好IP数据包头,接着再IP数据包头的基础上定义ICPM数据包头,由于需要计算回送时间,因此还需要ICMP回送数据的结构。PING的具体实现流程可以分为以下几点:首先创建SOCKET,然后根据主机名查询主机地址, 输出主机地址;接着调用PING主程序对目标主机地址进行测试,测试过程包含 相关信息的处理;最后输出信息,并关闭SOCKET。 2.3 设计流程图 2.4 设计方案 IP头与ICMP头的设置分别参照RFC791及RFC792的,包含所有必要信息。 ICMP回送数据结构增加了数据传输时间用于计算。主程序设置PING()函数,用于数据包发送及接收,其中,数据包发送(回送请求)调用另一函数 SendEchoRequest(),数据包接收(回送接收)调用RecvEchoReply()。由 于发送数据包时可能会遇到阻塞或者目标主机不通,造成超时,因此需要在发送 数据包后调用一个函数来判断是否超时,此处设置一个函数,WaitForEchoReply()来实现超时判断功能,该函数调用SOCKET的select()来进行判断。其次,还需要一个函数来计算CRC校验和,此处设置为in_cksum(),校验和采用移位的方法进行计算。另外设置一ReportError()函数来返回SOCKET操作相关的错误代码。 PING程序作为SOCKET的RAW方式下调用ICMP协议,数据包采用UDP发送,相应调用SOCKET的sendto()和recvfrom()进行发送及接收。334 PING程序的设计 ping核心程序 void Ping(LPCSTR pstrHost) { SOCKET rawSocket; LPHOSTENT lpHost; sockaddr_in saDest; sockaddr_in saSrc; DWORD dwTimeSent; DWORD dwElapsed; u_char cTTL; int nLoop; int nRet; //创建一个原始套接口 rawSocket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP); if(rawSocket==SOCKET_ERROR) { ReportError("socket()"); return; } //根据主机名查询主机地址 lpHost=gethostbyname(pstrHost); if(lpHost==NULL) { fprintf(stderr,"\nHost not found:%s\n"); return; }//设置目标套接口地址 saDest.sin_addr.s_addr=*((u_long FAR*)(lpHost->h_addr)); saDest.sin_family=AF_INET; saDest.sin_port=0; //输出Ping程序的提示信息 printf("\nPinging %s [%s] with %d bytes of data:\n", pstrHost,inet_ntoa(saDest.sin_addr),REQ_DATASIZE); //控制Ping执行的次数 for(nLoop=0;nLoop<4;nLoop++) { SendEchoRequest(rawSocket,&saDest);//使用select()等待接收回送的数 据 nRet=WaitForEchoReply(rawSocket); if(nRet==SOCKET_ERROR) { ReportError("select()"); break; } if(!nRet) { printf("\nTimeOut");//输出超时提示 break; } //接收应答 dwTimeSent=RecvEchoReply(rawSocket,&saSrc,&cTTL);//计算传输时间 dwElapsed=GetTickCount()-dwTimeSent; printf("\nReply from:%s:bytes=%d time =%ld ms TTL=%d", inet_ntoa(saSrc.sin_addr),REQ_DATASIZE,dwElapsed,cTTL); printf("\n"); } nRet=closesocket(rawSocket); if(nRet==SOCKET_ERROR) { ReportError("closesocket()"); } } ////////////////////////////////////////////////////////////////////////////////////////////////////// int SendEchoRequest(SOCKET s,LPSOCKADDR_IN lpstToAddr)//给目标站点发送 回送请求 { static ECHOREQUEST echoReq; static lwfree.cn int nRet; //填写回送请求信息 echoReq.icmpHdr.Type=ICMP_ECHOREQ; echoReq.icmpHdr.Code=0; echoReq.icmpHdr.Checksum=0; echoReq.icmpHdr.ID=nId++; echoReq.icmpHdr.Seq=nSeq++; //填写要发送的数据 for(nRet=0;nRet1) { sum+=*w++; nleft-=2; } if(nleft==1) { u_short u=0; *(u_char*)(&u)=*(u_char*)w; sum+=u; } sum=(sum>>16)+(sum&0xffff); sum+=(sum>>16); answer=~sum; return(answer); } PING程序的设计|网络概论课程设计报告|报告 ping实验结果 在命令行输入如下信息,进行本机测试: >Ping 127.0.0.1 输出结果为: 如果输入: >Ping www.751com.cn 输出结果为: 如果输入: >Ping 192.168.1.168 输出结果为: 5 总结 本次课程设计较好地实现了要求做到的功能,但同时也遇到了不少的困难和挑战。 通过这次设计,我不但加深了对SOCKET的原始套接字RAW编程的理解,同时也对IP和ICMP协议有了进一步的认识。这次设计的主要难点,在于数据包的发送 接收,TTL的计算,以及超时的判断。 通过这次课程设计,我了解到自己在ICMP协议方面还有很多不足,在完成实验的 过程中老师给了我很大的帮助和鼓励,使我能够很好的完成这次实验。 文献 1.程良伦主编,《网络工程概论》,机械工业出版社. 2007 2.苏峰,黄金双,汤蕾编著,《Visual C++.NET编程实例》,清华大学出版社.2004 3.黄嘉辉编著,《Internet与TCP/IP程序设计之C++ Builder高手》,清华大 学出版社.2001
/
本文档为【PING程序的设计-课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索