ping程序设计资料_第1页
ping程序设计资料_第2页
ping程序设计资料_第3页
ping程序设计资料_第4页
ping程序设计资料_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

1、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 网络

2、协议的基本实现方法,对网络的实现机制有进一步的认识。二、实验内容和要求1、raw 模式的 socket 编程ping 程序是面向用户的应用程序,该程序使用icmp 的封装机制, 通过 ip 协议来工作。为了实现直接对ip 和 icmp 包进行操作,实验中使用raw 模式的 socket 编程。熟悉 socket 的编程,包括基本的系统调用如socket 、bind 等;2、具体内容1) 定义数据结构需要定义好ip 数据报、 icmp 包等相关的数据结构;2) 程序实现在 windows环境下实现ping 程序;3) 程序要求在命令提示符下输入:ping . . . 其中 为目的主机的ip 地址

3、,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4 次响应。返回信息的格式:reply from . . . 或request timeout (无法 ping 通的情况)。三、实验主要仪器设备和材料联网计算机。四、实验方法、步骤及结构测试实验按下述步骤进行:1) 熟悉 ip 以及 icmp 协议的工作机制2) 熟悉 raw 模式的 socket 编程3) 编写 ping 的实现程序4) 编译环境中需要包括socket 库 ws2_32.lib 5) 在模拟实现环境下调试并运行自己编写的ping 程序6) 保留你实现的程序在你的用户目录下,以备辅导教师检查7) 最后提交

4、源程序,撰写实验报告五、课程设计进程安排序号设计各阶段内容地点起止日期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

5、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 程序的设计,其目的是希望同

6、学们通过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)程序要求在命令提示符下输入

7、:ping . . . 其中 为目的主机的ip 地址,不要求支持域名,对是否带有开关变量也不做要求。不带开关变量时,要求返回4 次响应。返回信息的格式:reply from . . . 或request timeout (无法 ping 通的情况)。2 ping 工作原理及设计方案2.1 设计思路由于 ping 是基于 icmp 协议,因此需要使用windows socket 中的 raw 模式进行编程。首先要定义好ip 数据包头,接着再ip 数据包头的基础上定义icpm 数据包头,由于需要计算回送时间,因此还需要icmp 回送数据的结构。ping 的具体实现流程可以分为以下几点:首先创建so

8、cket ,然后根据主机名查询主机地址,输出主机地址;接着调用ping 主程序对目标主机地址进行测试,测试过程包含相关信息的处理;最后输出信息,并关闭socket 。2.3 设计流程图2.4 设计方案ip头与 icmp 头的设置分别参照rfc791 及 rfc792 的标准,包含所有必要信息。 icmp回送数据结构增加了数据传输时间用于计算。主程序设置ping ()函数,用于数据包发送及接收, 其中,数据包发送 (回送请求) 调用另一函数sendechorequest () ,数据包接收 (回送接收)调用recvechoreply() 。由于发送数据包时可能会遇到阻塞或者目标主机不通,造成超时

9、,因此需要在发送数据包后调用一个函数来判断是否超时,此处设置一个函数,waitforechoreply()来实现超时判断功能,该函数调用socket 的 select ()来进行判断。其次,还需要一个函数来计算crc 校验和,此处设置为in_cksum() ,校验和采用移位的方法进行计算。另外设置一reporterror ()函数来返回socket 操作相关的错误代码。ping 程序作为socket 的 raw 方式下调用icmp 协议,数据包采用udp 发送,相应调用socket 的 sendto()和 recvfrom()进行发送及接收。ping 程序的设计ping 核心程序void pi

10、ng(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=g

11、ethostbyname(pstrhost); if(lphost=null) fprintf(stderr,nhost not found:%sn); 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_d

12、a tasize); /控制 ping 执行的次数for(nloop=0;nloop4;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);

13、/计算传输时间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)/ 给

14、目标站点发送回送请求 static echorequest echoreq; static 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=(sum16)+(sum&0 xffff); sum+=(sum16); answer=sum; return(answer); ping 实验结果在命令行输入如下信息,进行本机测试:ping 输出结果为:如果输入:ping 输出结果为 : 如果输入:ping 68 输出结果为 : 5 总结本次课程设计较好地实现了要求做到的功能,但同时也遇到了不少的困难和挑战。通过这次设计,我不但加深了对socket 的原始套接字raw 编程的理解,同时也对 ip 和 icmp 协议有了进一步的认识。这次设计

温馨提示

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

评论

0/150

提交评论