下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

ICMP协议之ping实现教程

作者:课课家教育     来源: http://www.kokojia.com点击数:1652发布时间: 2017-05-05 09:00:57

标签: ICMP协议互联网技术网络工程师

      ICMP是(InternetControlMessageProtocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

1.相关ICMP协议概述

  这里只讲解与ping有关的ICMP消息类型,主机发送回送消息(Type=8),被请求主机回送响应消息(Type=0),基本格式如下:

  回送消息[ECHO]

 ICMP协议之ping实现教程_ICMP协议_互联网技术_网络工程师_课课家教育

  回送响应消息[ECHOREPLY]

这里只讲解与ping有关的ICMP消息类型,主机发送回送消息(Type=8),被请求主机回送响应消息(Type=0),基本格式如下

  其中•Code=0,

  •CheckSum为校验和,重点注意从ICMP的头部(即Type开始),到data结束(即到整个数据包结束),具体计算见下面分析

  •Identifier为标识符,由主机设定,一般设置为进程号,回送响应消息与回送消息中identifier保持一致

  •SequenceNumber为序列号,由主机设定,一般设为由0递增的序列,回送响应消息与回送消息中SequenceNumber保持一致

  •data为数据,由主机设定,回送响应消息与回送消息中data保持一致

  2.Ping流程

  Ping实际上利用的就是ICMPECHO和ICMPECHOREPLY包来探测主机是否存在,所以Ping程序的流程十分简单:发送ICMPECHO包---->接收ICMPECHOREPLY包

  发送ICMPECHO包时填充Identifier为进程ID,SequenceNumber为从0递增计数,data填充为发送时间

  接收ICMPECHOREPLY包时检查Identifier,SequenceNumber是否正确,通过IP报头的源地址字段获得回送报文的主机地址是否正确

  3.模拟Ping实现pingy

  Ping的基本流程已讲解完

  重要性

  ICMP协议对于网络安全具有极其重要的意义。ICMP协议本身的特

  ICMP常用类型

  ICMP常用类型

  点决定了它非常容易被用于攻击网络上的路由器和主机。例如,在1999年8月海信集团“悬赏”50万元人民币测试防火墙的过程中,其防火墙遭受到的ICMP攻击达334050次之多,占整个攻击总数的90%以上!可见,ICMP的重要性绝不可以忽视!

  比如,可以利用操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“PingofDeath”(死亡之Ping)攻击。“PingofDeath”攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。(操作系统已经取消了发送ICMP数据包的大小的限制,解决了这个漏洞)

  此外,向目标主机长时间、连续、大量地发送ICMP数据包,也会最终使系统瘫痪。大量的ICMP数据包会形成“ICMP风暴”,使得目标主机耗费大量的CPU资源处理,疲于奔命。

  由于要自己构造ICMP包,因此创建需要创建原始套接字(即需要自己填充报头):

  sockfd=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP)

  SOCK_RAW用于直接访问网络层,应用程序负责构造自己的协议首部;IPPROTO_ICMP表示ICMP报头由程序构造

  构造ICMP报头,注意各个字段的填充,特别是校验和(可以参照icmp的结构定义)

  icmp->icmp_type

  icmp->icmp_code

  icmp->icmp_cksum

  icmp->icmp_id

  icmp->icmp_seq

  icmp->icmp_data;

  而完成系统的Ping命令还需添加信息统计,如发送字节数,收到字节数,发送包,接收包,发送时间,TTL等;另外,添加信号处理,在用户使用Control^C等退出时打印即时信息

  4.最终效果如下

而完成系统的Ping命令还需添加信息统计,如发送字节数,收到字节数,发送包,接收包,发送时间,TTL等;另外,添加信号处理,在用户使用Control^C等退出时打印即时信息

看完文章,有什么疑问么?如果有问题提出来和大家交流一下。也希望大家多支持课课家。

赞(0)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程