发送icmp echo请求重点讲义_第1页
发送icmp echo请求重点讲义_第2页
发送icmp echo请求重点讲义_第3页
发送icmp echo请求重点讲义_第4页
发送icmp echo请求重点讲义_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、 西北工业大学<<计算机网络原理>> project专用纸 No8题目:发送icmp echo请求姓名: 学号 班号: 时间:2016/11/16计算机学院时间:2016/11/16目 录摘 要1 目的12 要求13相关知识14实现原理及流程图错误!未定义书签。5程序代码76运行结果与分析77参考文献15题目:发送icmp echo请求1、 目的 理解ICMP协议完成的功能,了解ICMP报文格式,理解Ping程序的工作原理。2、要求针对某个主机发送ICMP echo报文。2、 相关知识ICMP报文分析一.概述:1.   ICMP允许主机或路

2、由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议,但ICMP不是高层协议,而是IP层的协议。通常ICMP报文被IP层或更高层协议(TCP或UDP)使用。一些ICMP报文把差错报文返回给用户进程。2.   ICMP报文作为IP层数据报的数据,加上数据报的首部,组成数据报发送出去。3.   ICMP报文的种类有两种,即ICMP差错报告报文和ICMP询问报文。二.ICMP报文的格式1.   类型:占8位2.   代码:占8位3.   检验和

3、:占16位说明:ICMP所有报文的前4个字节都是一样的,但是剩下的其他字节则互不相同。4.   其它字段都ICMP报文类型不同而不同。1>  ICMP报文的前4个字节是统一的格式,共有三个字段:即类型,代码和检验和。2>  8位类型和8位代码字段一起决定了ICMP报文的类型。类型8,代码0:表示回显请求(ping请求)。类型0,代码0:表示回显应答(ping应答)类型11,代码0:超时3>16位的检验和字段:包括数据在内的整个ICMP数据包的检验和;其计算方法和IP头部检验和的计算方法一样的。ICMP报文具体分为查询报文和差错

4、报文(对ICMP差错报文有时需要做特殊处理,因此要对其进行区分。如:对ICMP差错报文进行响应时,永远不会生成另一份ICMP差错报文,否则会出现死循环)三.ICMP差错报文(56字节)1.   ICMP差错报告报文共有5种1>  终点不可达:终点不可达分为:网络不可达,主机不可达,协议不可达,端口不可达,需要分片但DF比特已置为1,以及源路由失败等六种情况,其代码字段分别置为0至5。当出现以上六种情况时就向源站发送终点不可达报文。说明:端口不可达:UDP的规则之一是:如果收到UDP数据报而且目的端口与某个正在使用的进程不相符,那么UDP返回一个IC

5、MP不可达报文。2>  源站抑制:当路由器或主机由于拥塞而丢弃数据报时,就向源站发送源站抑制报文,使源站知道应当将数据报的发送速率放慢。3>  时间超过:当路由器收到生存时间为零的数据报时,除丢弃该数据报外,还要向源站发送时间超过报文。当目的站在预先规定的时间内不能收到一个数据报的全部数据报片时,就将已收到的数据报片都丢弃,并向源站发送时间超过报文。4>  参数问题:当路由器或目的主机收到的数据报的首部中的字段的值不正确时,就丢弃该数据报,并向源站发送参数问题报文。5>  改变路由(重定向)路由器将改变路由报文发送给主机,让主机知

6、道下次应将数据报发送给另外的路由器。说明:以下几种情况都不会导致产生ICMP差错报文1>ICMP差错报文(但是,ICMP查询报文可能会产生ICMP差错报文)2>目的地址是广播地址或多播地址的IP数据报3>作为链路层广播的数据报4>不是IP分片的第一片5>源地址不是单个主机的数据报。即源地址不能为零地址、环回地址、广播地址或多播地址。这些规则是为了防止过去允许ICMP差错报文对广播分组响应所带来的广播风暴。2.所有的ICMP差错报告报文中的数据字段都具有同样的格式。将收到的需要进行差错报告IP数据报的首部和数据字段的前8个字节提取出来,作为ICMP报文的数据字段。再

7、加上响应的ICMP差错报告报文的前8个字节,就构成了ICMP差错报告报文。提取收到的数据报的数据字段的前8个字节是为了得到运输层的端口号(对于TCP和UDP)以及运输层报文的发送序号(对于TCP)。注:一下情况不发送ICMP差错报告报文四.ICMP询问报文(40字节)1.ICMP询问报文有四种回送请求和回答,时间戳请求和回答,掩码地址请求和回答,以及路由器询问和通过。1>ICMP回送请求报文是由主机或路由器向一个特定的目的主机发出的询问。收到此报文的机器必须给源主机发送ICMP回送应答报文。这种询问报文用来测试目的站是否可达以及了解其有关状态。2>ICMP时间戳请求允许系统向另一个

8、系统查询当前的时间。该ICMP报文的好处是它提供了毫秒级的分辨率,而利用其他方法从别的主机获取的时间只能提供秒级的分辨率。请求端填写发起时间,然后发送报文。应答系统收到请求报文时填写接收时间戳,在发送应答时填写发送时间戳。大多数的实现是把后面两个字段都设成相同的值。3>主机使用ICMP地址掩码请求报文可向子网掩码服务器得到某个接口的地址掩码。系统广播它的ICMP请求报文。ICMP报文中的标识符和序列号字段由发送端任意选择设定,这些值在应答中将被返回,这样,发送端就可以把应答与请求进行匹配。4>主机使用ICMP路由器询问和通过报文可了解连接在本网络上的路由器是否正常工作。主机将路由器

9、询问报文进行广播(或多播)。收到询问报文的一个或几个路由器就使用路由器通过报文广播其路由选择信息4、实现原理及流程图实现原理:/定义IP首部格式typedef struct _IPHeader u_char VIHL; /版本和首部长度u_char ToS; /服务类型u_short TotalLen; /总长度u_short ID; /标识号u_short Frag_Flags; /片偏移量u_char TTL; /生存时间u_char Protocol; /协议u_short Checksum; /首部校验和struct in_addr SrcIP; /源IP地址struct in_add

10、r DestIP; /目的地址IPHDR, *PIPHDR;/定义ICMP首部格式typedef struct _ICMPHeader u_char Type; /类型u_char Code; /代码u_short Checksum; /首部校验和u_short ID; /标识u_short Seq; /序列号char Data; /数据ICMPHDR, *PICMPHDR;/定义ICMP回应请求typedef struct _ECHOREQUEST ICMPHDR icmpHdr;DWORD dwTime;char cDataREQ_DATASIZE;ECHOREQUEST, *PECHOR

11、EQUEST;/定义ICMP回应答复typedef struct _ECHOREPLY IPHDR ipHdr;ECHOREQUEST echoRequest;char cFiller256;ECHOREPLY, *PECHOREPLY;/计算校验和u_short checksum(u_short *buffer, int len) register int nleft = len;register u_short *w = buffer;register u_short answer;register int sum = 0;/使用32位累加器,进行16位的反馈计算while (nleft

12、> 1) sum += *w+;nleft -= 2;/补全奇数位if (nleft = 1) u_short u = 0;*(u_char *)(&u) = *(u_char*)w;sum += u;/将反馈的16位从高位移到低位sum = (sum >> 16) + (sum & 0xffff);sum += (sum >> 16);answer = sum;return (answer);/发送回应请求函数int SendEchoRequest(SOCKET s, struct sockaddr_in *lpstToAddr) static

13、ECHOREQUEST echoReq;static int nId = 1;static int nSeq = 1;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 < REQ_DATASIZE; nRet+) echoReq.cDatanRet = '1' + nRet;/存储发送的时间echoReq.dwTime = timeGetTime();/计算回应请求的校验和echoReq.icmpHdr.Checksum = checksum(u_short*)&echoReq, sizeof(ECHOREQUEST);/发送回应请求nRet = sendto(s, (LPSTR)&echoReq, sizeof(ECHOREQUEST),0, (struct sockaddr*)lpstToAdd

温馨提示

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

评论

0/150

提交评论