ICMP协议
1.ICMP基本概念
ICMP(互联网控制消息协议)是TCP/IP协议族的核心协议之一,负责提供在TCP/IP网络上设备,服务协议,以及路由器可用性的信息,大多数网络检修技巧和工具都是基于常用的ICMP消息类型,ICMP依靠IP协议来完成其任务,通常也是IP协议的一个集成部分,ICMP协议和TCP或UDP协议目的不同,一般不用于端之间传输数据,通常不被用户网络程序直接使用,而是结合进ping或tracert诊断程序里面。ICMP我们接触最多的是ping这个工具。
Ping是用于检测一个设备的可连接行的工具,ping工具发送ICMP请求数据包,正因为如此学习ICMP协议对于网络安全具有及其重要的意义,因为ICMP协议的特点决定了它非常容易用于攻击网上的路由器和主机,比如用户可以利用操作系统规定的ICMP数据包的最大尺寸不能超过64K的规定,向网络上的主机发送ping of death攻击,它属于一种拒绝服务攻击,因为当ICMP数据包的大小超过64K的时候,目标主机就有可能出现内存分配错误的情况,从而导致系统崩溃,使得主机死机,另外向目标主机长时间连续大量的发送ICMP数据包也会导致系统瘫痪,大量的ICMP数据包会形成ICMP风暴,使得目标主机耗费大量的cpu资源来处理。
2.利用wireshark分析由ping以及tracert捕获的数据包,了解二者的异同点。
首先使用ping工具发送ICMP数据包,然后使用wireshark软件来捕获ICMP数据包。
这里我们使用ping工具去ping百度。
使用wireshark捕获ICMP数据包。
然后进行ICMP数据包筛选,在筛选器中输入ICMP回车,这样就会筛选出我们需要查看的ICMP数据包。
以下是捕获文件。
在分析这个ICMP数据包,需要重点关注ICMP头部的type和code的内容,type表示的ICMP消息基于rfc规范的类型和分类,code表示的是ICMP消息基于rfc规范的子类型。
选择第一个数据包。
在这里可以看到是IP地址为192.168.20.150的主机,在向14.215.177.39百度服务器发送ICMP数据包。
现在点开第一个数据包找到ICMP协议。
在这里可以看到这个ICMP数据包的头部信息中的type为8,code为0。
说明这是一个ICMP请求数据包,使用IP发送,包含的数据很少,除了指定的类型,代码,校验和,序列号用于匹配请求和响应,并且在可变域中还包含了一串随机的字符串。
然后我们再选择第二个ICMP数据包,这个数据包时对第一个数据包的响应。
在这里可以看到第二个ICMP数据包的TYPE数值为0,可以发现这个数据包时对第一个数据包的响应。
。
可以发现第二个数据包的序列号和第一个数据包的序列号它都时相同的可以匹配的。说明第二个数据包可以和第一个数据包相对应。在date里面的随机字符串也可以于第一个数据包相匹配。
当这个数据包被接收后,ping也就成功。
ICMP请求使用的字符串可能会引起攻击者的兴趣,攻击者可以通过字符串推测设备使用的操作系统,并且攻击者可能在这段内容中放置数据位作为反向连接的手段。
3.路由跟踪。
路由跟踪功能是用来识别一个设备到另一个设备的网络路径,在一个简单的网络上网络路径可能只经过一个路由器,甚至一个路由器也不会经过,在一个复杂的网络上数据包可能会经过数十个路由器才会到达目的地。对于网络通信检修来说,确定数据包从一个地方到另一个地方所经过的网络路径来说是很重要的,要进行路由跟踪可以使用tracert功能,它就是利用了ICMP协议。
现在打开命令提示符,在里面使用tracert功能对百度进行路由跟踪。
通过wireshark进行tracert数据包的捕获,以下是捕获文件。
打开捕获文件,在筛选器中输入ICMP回车。
然后选择包号为6的ICMP数据包。
可以发现这个ICMP包跟前面分析的ICMP包一样都是由源IP地址为192.168.20.150发送到目的IP地址为14.215.177.39目的地,头部信息type和code都是相同的,但是跟上面分析的数据包还是有区别的,打开IP部分找到TTL,TTL的数值是不同的。
TTL值一个是64,一个是1。代表着第一个数据包需要经过64个路由器才会被丢弃,而第二个数据包所遇到的第一个路由器的地方将会被丢弃到。意思就是源地址192.168.20.150到目的地址14.215.177.39之间至少存在一个路由器,这个数据包不会到达目的地。
打开捕获的第二个数据包。
这个数据包就是在前往目的地所经过的第一个路由器发回的响应
由于第一个数据包在到达192.168.20.1之后,TTL值为0,因此就不能够继续传输,这时路由器就回复了一个ICMP响应数据包。我们可以看到type类型为11,代码是0,告诉我们这个数据包的TTL在传输中超时,所以目标地址不可达。在这里个数据包中结尾的部分,它包含了源请求的IP头和ICMP的拷贝,这个数据包也叫做ICMP双头包,表示包含有二个ICMP的包头信息,双包头的信息在网络故障的检修中会非常的有用。
4.ICMP数据包的捕获。
可以简单的用ping工具,然后使用wireshark来抓取。使用wireshark上方菜单栏里面的捕获里面的选项,点击进入设置捕获筛选。
设置捕获筛选。
在捕获过滤器中输入设置需要捕获的类型,然后点开始开始捕获。这里还在命令行里面运用ping工会对百度发起ping。然后再来看看wireshark捕获的数据包。
在这里可以看见捕获的所有数据包协议类型都是ICMP。