网站导航网学 原创论文 原创专题 网站设计 最新系统 原创论文 论文降重 发表论文 论文发表 UI设计定制 论文答辩PPT格式排版 期刊发表 论文专题
返回网学首页
网学原创论文
最新论文 推荐专题 热门论文 论文专题
当前位置: 网学 > 交易代码 > 课程设计 > 正文

PING程序的设计

论文降重修改服务、格式排版等 获取论文 论文降重及排版 论文发表 相关服务
PING程序的设计1  ping设计任务目的及要求 51.1 设计目的 52  ping工作原理及设计方案 52.1 设计思路 52.3 设计流程图 62.4 设计方案 63  ping核心程序 74  ping实验结果 105  总结 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.lib5) 在模拟实现环境下调试并运行自己编写的PING程序6) 保留你实现的程序在你的用户目录下,以备辅导教师检查7) 最后提交源程序,撰写实验报告五、 课程设计进程安排序号 设计各阶段内容 地点 起止日期1 选择课程设计题目,分析题目要求及熟悉实验软件。 实验2号楼202 2008.12.222 查阅资料,提出设计方案并讨论。 图书馆 2008.12.233 进行编译并调试程序 实验2号楼202 2008.12.244 调试程序、改进 实验2号楼202 2008.12.255 检查 实验2号楼202 2008.12.26
六、 应收集的资料及主要参考文献1. 程良伦主编,《网络工程概论》,机械工业出版社. 20072. 苏峰,黄金双,汤蕾编著,《Visual C++.NET编程实例》,清华大学出版社.20043. 黄嘉辉编著,《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;nRet}//接收数据并对字段进行分析DWORD RecvEchoReply(SOCKET s,LPSOCKADDR_IN lpsaFrom,u_char *pTTL){ ECHOREPLY echoReply; int nRet; int nAddrLen=sizeof(struct sockaddr_in);//接收回送应答 nRet=recvfrom(s,(LPSTR)&echoReply,sizeof(ECHOREPLY),0,(LPSOCKADDR)lpsaFrom,&nAddrLen);//检查返回值 if(nRet==SOCKET_ERROR)  ReportError("recvform()"); *pTTL=echoReply.ipHdr.TTL;//返回发送时间的IP生存时间TTL return(echoReply.echoRequest.dwTime);}//输出发生的错误void ReportError(LPCSTR pWhere){ fprintf(stderr,"\n error:%d\n",WSAGetLastError());}
//使用select()函数进行状态查询,以确定是否有数据等待读取int WaitForEchoReply(SOCKET s){ struct timeval Timeout; fd_set readfds; readfds.fd_count=1; readfds.fd_array[0]=s; Timeout.tv_sec=5; Timeout.tv_usec=0;lwfree.cn register u_short answer; register int sum=0; while(nleft>1) {  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.程良伦主编,《网络工程概论》,机械工业出版社. 20072.苏峰,黄金双,汤蕾编著,《Visual C++.NET编程实例》,清华大学出版社.20043.黄嘉辉编著,《Internet与TCP/IP程序设计之C++ Builder高手》,清华大学出版社.2001
  • 上一篇资讯: ftp程序的设计
  • 下一篇资讯: VB宾馆管理系统
  • 设为首页 | 加入收藏 | 网学首页 | 原创论文 | 计算机原创
    版权所有 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2020 myeducs.Cn www.myeducs.Cn All Rights Reserved 湘ICP备09003080号 常年法律顾问:王律师