2023年计算机网络ping实验报告_第1页
2023年计算机网络ping实验报告_第2页
2023年计算机网络ping实验报告_第3页
2023年计算机网络ping实验报告_第4页
2023年计算机网络ping实验报告_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

课程设计课程名称《计算机网络课程设计》题目名称.PING程序设计学生学院一自动化学院专业班级学号学生姓名指导教师2009年12月30日。{。1en=1en-iphdrlen-8;4tt=GetTickCount()-icmp->icmpdata;。叩rintf(nReplyfrom%s:bytes=%dtime=%.0fmsTTL=%dicmp_seq=%u\n”,。inet_ntoa(from_addr.sinaddr),bo1en,80rtt,ip->iP_ttl9icmp—>icmp_seq);areturn1;)return0;)//发送voidsend_packet()(intpacketsize;。staticintpack_no=0;packetsize=pack(pack_nO++);if(sendto(sockfd,sendpacket,packetsize,0,(structsockaddr*)&dest_addr,sizeof(dest_addr))<0)“printf(nDestinationhostunreachable.\nn);//printf(nsendNO%d\nn,pack_no—1);)〃接受voidrecv_packet()(intn,fromlen;intsuccess;fromien=sizeof(from_addr);Go(oif((n=recvfrom(sockfd,recvpacket,sizeof(recvpacket),0,(structsockaddr*)&from_addr,&fromlen))>=0)a。success=unpack(recvpacket,n);oeIseif(WSAGetLastError。。return;00}o}whi1e(!success);}()==WSAETIMEDOUT)(6叩rintf("Requesttimedout.\nn);实验结果总结本次课程设计较好地实现了规定做到的功能,但同时也碰到不少的困难和挑战。通过这次设计,不仅加深了对Socket的原始套接字RAW编程的理解,同时也对IP和ICMP协议有了进一步的结识。这次设计的重要难点,在于数据包的发送和接受,TTL的计算,以及超市的判断。参考文献程良伦主编,《网络工程概率论》,机械工业出版社,2023苏峰,黄金双,汤蕾编著,《VisualC++.Net编程实例》,清华大学出版社,2023黄家辉编著,《Internet与TCP/IP程序设计之C++Bui1der高手》,清华大学出版社,2023摘要本说明书重要涉及了ping程序设计的设计目的、ping程序的工作原理以及设计方案,重点介绍了ping程序的源代码,并且附带了实验结果以及总结等。关键字:Ping程序设计目录1实验设计目的及规定错误!未定义书签。设计目的。错误!未定义书签。。设计规定。错误!未定义书签。实验内容。错误!未定义书签。2.1定义数据结构错误!未定义书签。2.2程序实现。错误!未定义书签。2.3。程序规定错误!未定义书签。ping工作原理及设计方案错误!未定义书签。3.1。设计思绪。错误!未定义书签。设计方案错误!未定义书签。ping源程序。错误!未定义书签。4实验结果错误!未定义书签。5。总结。错误!未定义书签。6,参考文献错误!未定义书签。1实验设计目的及规定设计目的PING程序是我们使用的比较多的用于测试网络连通性的程序。PING程序基于ICMP,使用ICMP的回送请求和回送应答来工作。由计算机网络课程知道,ICMP是基于IP的一个协议,ICMP包通过IP的封装之后传递。课程设计中选取PING程序的设计,其目的是希望同学们通过PING程序的设计,能初步掌握TCP/IP网络协议的基本实现方法,对网络的实现机制有进一步的结识。设计规定RAW模式的SOCKET编程PING程序是面向用户的应用程序,该程序使用ICMP的封装机制,通过IP协议来工作。为了实现直接对IP和ICMP包进行操作,实验中使用RAW模式的SOCKET编程。熟悉SOCKET的编程,涉及基本的系统调用如SOCKET、BIND等;实验内容定义数据结构需要定义好IP数据报、ICMP包等相关的数据结构;程序实现在WINDOWS环境下实现PING程序;程序规定在命令提醒符下输入:其中XXX为目的主机的IP地址,不规定支持域名,对是否带有开关变量也不做规定。不带开关变量时,规定返回4次响应。返回信息的格式:REPLYFROMXXX.XXX.XXX.XXX或REQUESTTimeOut(无法PING通的情况)。ping工作原理及设计方案设计思绪由于Ping是基于ICMP协议,因此需要使用windowssocket中的RAW模式进行编程,一方面定义好IP数据包头,接着在IP数据包头的基础上定义ICMP数据包头,由于需要计算回送时间,因此还需要ICMP回送数据的结构。Ping的具体实现流程可以分为以下几点:一方面创建SOCKET,然后根据主机名查询地址;接着调用PING主程序对目的主机地址进行测试,测试过程包含相关信息的解决;最后显示回复,并关闭SOCKET设计方案IP头与ICMP头的设立分别参照RFC791及RFC792的标准,包含所有必要信息。主程序设立main。函数,用于数据包发送及接受,其中,数据包发送调用另一函数voidsend_packet(),数据包接受调用voidrecv_packet(),由于发送数据包时也许会碰到阻塞或者目的主机不通,导致超时,因此需要在发送数据包后调用一个函数判断是否超时,此处设立函数sets

ockopt()来实现超时判断;另一方面,还需要一个函数来计算CRC校验和,此处设立为signedshortcal_chksum(),校验和采用移位方法进行计算。ICMPECHO8ICMPECH0REPLYping源程序ICMPECHO8ICMPECH0REPLY//Ping.cpp:定义控制台应用程序的入口点。include<Winsock2.h>inc1ude<process.h>inc1ude<stdio.h>defineSEND_SIZE32definePACKETSIZE4096define#define0#pragmacomment(lib,nWs232.lib”)structicmp(unsignedcharicmp_type;//类型nmsignedcharicmp_code;//编码ounsignedshorticmp_chksum;//校验和unsignedshorticmp_id;//标示符ounsignedshorticmp_seq;//顺序号ounsignedlongicmp_data;〃数据};structip(ounsignedcharip_h1:4;//报头长度nmsignedcharip_v:4;//版本号unsignedcharip_tos;〃服务类型ounsignedshortip_1en;〃总长度unsignedshortip_id;//标记unsignedshortip_off;//标志unsignedcharip_111;//生存时间ounsignedcharip—p;//协议号。unsignedshortip_sum;//报头校验和ounsigned1ongipsrc;//源IP地址unsigned1ongip_dst;//目的IP地址);charsendpacket[PACKET_SIZE];charrecvpacket[PACKET_SIZE];structsockaddr_indest_addr;structsockaddrinfromaddr;intsockfd;intpid;unsignedshortcal_chksum(unsignedshortddr,intlen);intpack(intpack—no);intunpack(unsignedchar*buf,int1en);voidsend_packet(void);voidrecv_packet(void);intmain(intargc,CHAR*argv[])(structhostent*host;structprotoent*protocol;inttimeout=1000;ointSENDC0UNT=4;inti;ochar*par_host;charm_Input[l00];printf(nInputIP:");唱ets(m_Input);叩ar_host=m_Input;oWORDwVersionRequested;oWSADATAwsaData;interr;owVersionRequested=MAKEWORD(2,2);err=WSAStartup(wVersionRequested,&wsaData);Af(err!=0)return;oif(LOBYTE(wsaData.wVersion)!=2||。HIBYTE(wsaData.wVersion)!=2){aWSAC1eanup();。阿eturn;“f((protoco1=getprotobyname(nicmp"))==NULL)//返回相应于给定协议名的包含名字和协议号6{。printf(Hgetprotobynameerror\nn);〃的protoent结构指针exit(1);)oif((sockfd=socket(AF_INET,SOCK_RAW9protoco1->p_proto))<0){。叩rintf(nsocketerror\nn);oexit(l);oif(setsockopt(sockfd,S0L_SOCKET,SORCVTIMEO,(char*)&timeout,sizeof(timeout))<0)〃设立套接口的选项“fprintf(stderr/failedtosetrecvtimeout:%d\n\WSAGetLastError0);“f(setsockopt(sockfd,SOL—S0CKET,S0SNDTIMEO,(char*)&timeout,sizeof(timeout))<0)bfprintf(stderr,"fai1edtosetsendtimeout:%d\n”,WSAGetLastError());^>memset(&dest_addr,0,sizeof(dest_addr));odest_addr.sinfami1y=AF_INET;“f(host=gethostbyname(par_host))//返回相应于给定主机名的主机信息{memcpy((char*)&dest_addr.sin_addr,host->h_addr,host—>h_length);g//resolveaddresstohostname。if(host=gethostbyaddr(host->h_addr,4,PFJNET))。par_host=host->h_name;}e1seif(dest_addr.sinaddr.s—addr=inet_addr(par_host)==INADDR_NONE)。{gprintf("Unkownhost%s\nn,par_host);oexit(l);)叩id=_getpid();printf("Pinging%s[%s]:with%dbytesofdata:\n\nn,par_host,inet_ntoa(dest_addr.sinaddr),SEND_SIZE);ofor(i=0;i<SENDCOUNT;i++)b{send_packet();cv_packet();Sleep(lOOO);)//thisalgorithmisreferencedfromothefsunsignedshortcal_chksum(unsignedshort*addr,intlen)(ointn1eft=len;“ntsum=0;nsignedshort*w=addr;ounsignedshortanswer=0;while(nleft>1){sum+=*w++;onleft-=2;“f(nleft==1)//解决ICMP报头为奇数个字节时累加最后一个{*(unsignedchar*)(&answer)=*(unsignedchar*)w;sum+=answer;)osum=(sum>>16)+(sum&0xffff);。sum+=(sum»16);nswer二〜sum;oreturnanswe

温馨提示

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

评论

0/150

提交评论