作者:网丐(贾敬华)
大家都知道,当我们发现网络不正常时,首先会想到使用Ping命令检查一下网络连接是不是正常。举一个简单的例子,当我们网吧的机器无法上网时,我们会首先用Ping命令检查一下从客户机到网关的物理链接线路是否畅通,然后找一个外网的网址,Ping一下外网的网址以判断故障所在。可是不知道什么时候起,我们在使用Ping命令检查外部网络是否畅通时,却发现网络明明是通的,使用Ping命令检测时,系统提示网络不通。Ping命令为什么不好用了呢?
众所周知,Ping命令只有在安装了TCP协议后才有效的,究其原委,Ping命令是工作在ICMP协议上的,只有充分理解了TCP协议还有ICMP协议,我们才能了解Ping命令的工作机制。ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。
当我们使用Ping命令检查网络是否通畅的时候,主机就会发送一个数据包到目的地址,如果对方机器在规定的时间内无响应时,主机会认为对方主机无响应,网络不通。这就是们Ping默认的工作机理。由于Ping命令是工作在TCP协议中的子协议之一ICMP协议的基础上,当我们将ICMP协议禁止后,即便是物理链接通畅的网络,也会出现无法Ping通的情况。Ping命令虽然对我们判断网络故障非常有帮助,但是由于ICMP协议的先天漏洞,Ping命令也有时候会成为黑客手中的破坏武器。
我们使用Ping命令检测网络是否畅通时,执行完此命令时,会得到如图一的反馈信息,
(图一)
在默认的情况下Windows 的Ping发送的数据包大小为32byt,我们也可以自己定义它的大小,但系统有一个大小的限制,就是最大只能发送65500byt。当我们使用Ping命令时,将每次发送的数据包定义为最大值65500byt后,然后让Ping命令一刻不停的发达此数据包,由于现在的Windows 操作系统都支持多任务,我们可以在同一台机器上开十几个Ping命令窗口,同时向同一台主机发送Ping命令。如果我们的机器是Windows 98系统来说,当几十个Ping命令同时检测装有Windows 98的机器时,系统肯定会立即蓝屏并死机。这时,Ping命令便成为恶意破坏者手中的利器,为了防止有人恶意利用ICMP协议的漏洞,我们有时候在服务器上将ICMP协议过滤掉,这样使用Ping命令检测时,就会出现无法Ping通的现象。
有人或许会说,用Ping命令也会使机器死机?大家可以做一个简单的实验,编辑一个内容如下的批处理: @echo off ping 192.168.1.6 –t -l 65550
然后分别取名为1.bat和2.bat,编辑十个同样内容的批处理文件,然后再编辑一个gj.bat,内容如下 call 1.bat call 2.bat
有几个批处理文件,将这一命令行多复制几条,并保存。然后执行一下gj.bat你看一下会出现什么样的情况。我使用ping 192.168.1.1 –t -65500命令,检测了一下我的ADSL路由器,显示结果如图二
(图二)
大家比较一下图一和图二,明显看出来数据包返回的时间最大值达到了115ms。我操作系统是Windows XP,如果同时运行十条此命令的话,估计我的ADSL猫应该挂了。
操作系统规定的ICMP数据包最大尺寸不超过64KB这一规定,向主机发起“Ping of Death”(死亡之Ping)攻击。“Ping of Death” 攻击的原理是:如果ICMP数据包的尺寸超过64KB上限时,主机就会出现内存分配错误,导致TCP/IP堆栈崩溃,致使主机死机。死亡之Ping攻击,对于任何操作系统都有效,包括被大家公认安全性极高的Linux操作系统。因此现在一些官方大站点,如网易、新浪,都通过禁用ICMP协议来禁止Ping的目的。另外,电信部门为了加强其服务器的安全,也都禁止了ICMP协议。目前,禁止ICMP的方法主要有以下几种:
一、利用IP安全策略禁止ICMP协议
对于Windows XP和Windows 2000操作系统,可以使用IP安全策略,禁止ICMP协议。在运行中输入gpedit.msc后,依次打开“计算机配置”—“Windows 设置”—“安全设置”—“IP安全策略”就可以了。在右面的空白处,单击右键,选择“创建IP安全策略”后,在出现“IP安全策略”名称中,输入此安全策略的名字,我们输入的名字为“禁止ICMP策略”,点击下一步继续,在出现“默认响应规则身份验证方式”对话框中,选择“此字符串用来保护密钥交换(预共享密钥)”选项,继续下一步完成策略的新建工作。
策略新建后,双击此策略,编辑此策略的属性,如图三。点击“添加”,进入安全规则添加向导,我们按照系统提示进行操作即可。在出现“身份验证方法”对话框时,选择“此字符串用来保护密钥交换(预共享密钥)”选项,继续下一步操作。在“IP筛选器列表”选
(图三)
项中,选择“所有ICMP通讯量”,并继续下一步的操作。在“筛选器操作”中,由于我们要禁止ICMP,我们可以选择“需要安全”,并点击右面的编辑选项出现“需要安全属性”对话框,在“安全措施”中选择“阻止”就完成了操作。完成此操作后,系统自动回到“IP安全策略”对话框,此时我们必须指派刚才新建的策略,禁止ICMP的策略才会生效。
二、利用防火墙软件禁止ICMP协议
我们可以在机器中,安装天网防火墙来禁止ICMP协议,防止死亡之Ping攻击。另外,其他的防火墙软件也有此功能。
三、利用路由器的IP策略禁止ICMP协议
现在的路由器,一般都支持IP策略,我们可以利用路由器的IP策略,禁止ICMP协议,以保护我们的服务和客户机。
或许我们都发现了一些官方网站无法Ping通的现象,可是没有人去思考过是什么原因造成的。技术的提高,新知识的学习,就是在善于发现并解决问题的过程是实现的。