ping简述

  • ICMP协议是“Internet Control Message Protocol”(因特网控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。

  • ping (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP;回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答)。它是用来检查网络是否通畅或者网络连接速度的命令

  • ping命令通常用来作为网络可用性的检查。ping命令可以对一个网络地址发送测试数据包,看该网络地址是否有响应并统计响应时间,以此测试网络。

  • ping和ICMP的关系:ping命令发送数据使用的是ICMP协议。

ping的原理

向指定的网络地址发送一定长度的数据包,按照约定,若指定网络地址存在的话,会返回同样大小的数据包,当然,若在特定时间内没有返回,就是“超时”,会被认为指定的网络地址不存在。

ICMP协议通过IP协议发送的,IP协议是一种无连接的,不可靠的数据包协议。在Unix/Linux,序号从0开始计数,依次递增。而Windows ping程序的ICMP序列号是没有规律。

ICMP协议在实际传输中数据包:20字节IP首部 + 8字节ICMP首部 + 1472字节<数据大小>38字节。

ICMP报文格式:IP首部(20字节) + 8位类型 + 8位代码 + 16校验和 + (不同类型和代码,格式也有所不同)。

ping命令的介绍

执行 ping 指令会使用 ICMP 传输协议,发出要求回应的信息,若远端主机的网络功能没有问题,就会回应该信息,因而得知该主机运作正常。

语法
ping [-dfnqrRv][-c<完成次数>][-i<间隔秒数>][-I<网络界面>][-l<前置载入>][-p<范本样式>][-s<数据包大小>][-t<存活数值>][主机名称或IP地址]

参数说明:

-d 使用Socket的SO_DEBUG功能。
-c <完成次数> 设置完成要求回应的次数。
-f 极限检测。
-i<间隔秒数> 指定收发信息的间隔时间。
-I<网络界面> 使用指定的网络接口送出数据包。
-l<前置载入> 设置在送出要求信息之前,先行发出的数据包。
-n 只输出数值。
-p<范本样式> 设置填满数据包的范本样式。
-q 不显示指令执行过程,开头和结尾的相关信息除外。
-r 忽略普通的Routing Table,直接将数据包送到远端主机上。
-R 记录路由过程。
-s<数据包大小> 设置数据包的大小。
-t<存活数值> 设置存活数值TTL的大小。
-v 详细显示指令的执行过程。
-w <deadline> 在 deadline 秒后退出。
-W <timeout> 在等待 timeout 秒后开始执行。

实践

-c <完成次数> 设置完成要求回应的次数。5。
-i<间隔秒数> 指定收发信息的间隔时间。为10s。
-s<数据包大小> 设置数据包的大小。15
-t<存活数值> 设置存活数值TTL的大小。255

[root@192-168-125-182 lys]# ping -d -c 5 -i 10 -s 15 -t 255  10.0.42.91
PING 10.0.42.91 (10.0.42.91) 15(43) bytes of data.
23 bytes from 10.0.42.91: icmp_seq=1 ttl=63
23 bytes from 10.0.42.91: icmp_seq=2 ttl=63
23 bytes from 10.0.42.91: icmp_seq=3 ttl=63
23 bytes from 10.0.42.91: icmp_seq=4 ttl=63
23 bytes from 10.0.42.91: icmp_seq=5 ttl=63--- 10.0.42.91 ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 40000ms

死亡之Ping

最简单的基于IP的攻击可能要数著名的死亡之ping,这种攻击主要是由于单个包的长度超过了IP协议规范所规定的包长度。产生这样的包很容易,事实上,许多操作系统都提供了称为ping的网络工具。

如何工作呢?

死亡之ping是如何工作的呢?首先是因为以太网长度有限,IP包片段被分片。当一个IP包的长度超过以太网帧的最大尺寸(以太网头部和尾部除外)时,包就会被分片,作为多个帧来发送。接收端的机器提取各个分片,并重组为一个完整的IP包。在正常情况下,IP头包含整个IP包的长度。当一个IP包被分片以后,头只包含各个分片的长度。分片并不包含整个IP包的长度信息,因此IP包一旦被分片,重组后的整个IP包的总长度只有在所在分片都接受完毕之后才能确定。

在IP协议规范中规定了一个IP包的最大尺寸,而大多数的包处理程序又假设包的长度超过这个最大尺寸这种情况是不会出现的。因此,包的重组代码所分配的内存区域也最大不超过这个最大尺寸。这样,超大的包一旦出现,包当中的额外数据就会被写入其他正常区域。这很容易导致系统进入非稳定状态,是一种典型的缓存溢出(Buffer Overflow)攻击。在防火墙一级对这种攻击进行检测是相当难的,因为每个分片包看起来都很正常。

由于使用ping工具很容易完成这种攻击,以至于它也成了这种攻击的首选武器,这也是这种攻击名字的由来。当然,还有很多程序都可以做到这一点,因此仅仅阻塞ping的使用并不能完全解决这个漏洞。预防死亡之ping的最好方法是对操作系统打补丁,使内核将不再对超过规定长度的包进行重组。

操作(不要随便操作)

​ 打开系统的命令窗口,windows电脑按win+R ,输入cmd命令后进入命令界面:

ping -l 65500 目标ip -t

常见攻击与防范

SYN Flood攻击:

问题就出在TCP连接的三次握手中,假设一个用户向服务器发送了SYN报文后突然死机或掉线,那么服务器在发出SYN+ACK应答报文后是无法收到客户端的ACK报文的(第三次握手无法完成),这 种情况下服务器端一般会重试(再次发送SYN+ACK给客户端)并等待一段时间后丢弃这个未完成的连接,这段时间的长度我们称为SYN Timeout,一般来说这个时间是分钟的数量级(大约为30秒 -2分钟);一个用户出现异常导致服务器的一个线程等待1分钟并不是什么很大的问题,但如果有一个恶意的攻击者大量模拟这种情况,服务器端将为了维护一个非常大的半连接列表而消耗非常多的资源----数以万计的半连接,即使是简单的保存并遍历也会消耗非常多的CPU时间和内存,何况还要不断对这个列表中的IP进行SYN+ACK的重试。实际上如果服务器的TCP/IP栈不够强大,最 后的结果往往是堆栈溢出崩溃—即使服务器端的系统足够强大,服务器端也将忙于处理攻击者伪造的TCP连接请求而无暇理睬客户的正常请求(毕竟客户端的正常请求比率非常之小),此时从 正常客户的角度看来,服务器失去响应,这种情况我们称作:服务器端受到了SYN Flood攻击(SYN洪水攻击)。

防范:

第一种是缩短SYN Timeout时间   第二种方法是设置SYN Cookie,就是给每一个请求连接的IP地址分配一个Cookie,如果短时间内连续受到某个IP的重复SYN报文,就认定是受到了攻击,以后从这个IP地址来的包会被一概丢弃。   >netstat -n -p tcp >result.txt

Smurf攻击

发送伪装的ICMP数据包,目的地址设为某个网络的广播地址,源地址设为要攻击的目的主机,使所有收到此ICMP数据包的主机都将对目的主机发出一个回应,使被攻击主机在某一段时间内收到 成千上万的数据包  。

防范:
在cisco路由器上配置如下可以防止将包传递到广播地址上:   Router(config-if)# no ip directed-broadcast

Ping of Death

“ping ofdeath"攻击就是我们常说的"死亡Ping”   这种攻击通过发送大于65536字节的ICMP包使操作系统崩溃;通常不可能发送大于65536个字节的ICMP包,但可以把报文分割成片段,然后在目标主机上重组;最终会导致被攻击目标缓冲区溢出,引起拒绝服务攻击。有些时候导致telne和http服务停止,有些时候路由器重启。

teardown攻击

对于一些大的IP数据包,往往需要对其进行拆分传送,这是为了迎合链路层的MTU(最大传输单元)的要求。比如,一个6 000字节的IP包,在MTU为2 000的链路上传输的时候,就需要分成3个IP 包。在IP报头中有一个偏移字段和一个拆分标志(MF)。如果MF标志设置为1,则表示这个IP包是一个大IP包的片段,其中偏移字段指出了这个片段在整个IP包中的位置。例如,对一个6 000字 节的IP包进行拆分(MTU为2 000),则3个片段中偏移字段的值依次为0,2000,4 000。这样接收端在全部接收完IP数据包后,就可以根据这些信息重新组装这几个分次接收的拆分IP包。在这 里就有一个安全漏洞可以利用了,就是如果黑客们在截取IP数据包后,把偏移字段设置成不正确的值,这样接收端在收到这些分拆的数据包后,就不能按数据包中的偏移字段值正确组合这些拆分的数据包,但接收端会不断尝试,这样就可能致使目标计算机操作系统因资源耗尽而崩溃。

Land(LandAttack)攻击

在Land攻击中,黑客利用一个特别打造的SYN包–它的原地址和目标地址都被设置成某一个服务器地址进行攻击。此举将导致接受服务器向它自己的地址发送SYN-ACK消息,结果这个地址又发回ACK消息并创建一个空连接,每一个这样的连接都将保留直到超时,在Land攻击下,许多UNIX将崩溃,NT变得极其缓慢(大约持续五分钟)。

IP欺骗

这种攻击利用TCP协议栈的RST位来实现,使用IP欺骗,迫使服务器把合法用户的连接复位,影响合法用户的连接。假设有一个合法用户(100.100.100.100)已经同服务器建了正常的连接,攻击者构造攻击的TCP数据,伪装自己的IP为100.100.100.100,并向服务器发送一个带有RST位的TCP数据段。服务器接收到这样的数据后,认为从100.100.100.100发送的连接有错误,就会清空缓冲区中已建立好的连接。这时,合法用户100.100.100.100再发送合法数据,服务器就已经没有这样的连接了,该用户就被拒绝服务而只能重新开始建立新的连接。

深入理解死亡之Ping ---《openstack 网络安全》相关推荐

  1. linux服务器防端口扫描,linux下防止syn***,端口扫描和死亡之ping

    http://downloads.sourceforge.net ... les-v0.0.3-3.tar.gz下载以后安装: tar zxvf arptables-v0.0.3-3.tar.gz c ...

  2. 死亡之Ping(Ping of Death)攻击

    由于在早期的阶段,路由器对包的最大尺寸都有限制,许多操作系统对TCP/IP栈的实现在ICMP包上都是规定64KB,并且在对包的标题头进行读取之后,要根据该标题头里包含的信息来为有效载荷生成缓冲区,当产 ...

  3. 如何走出物联网死亡之井?

    作者 | 刘洪峰 责编 | 唐小引 出品 | CSDN(ID:CSDNnews) 犹记得 2009 年温总理的无锡之行,那句「感知中国」的物联网发展口号,到如今依然言犹在耳.一晃,中国的物联网发展之路 ...

  4. 第一个冷门与真正的死亡之组

    6月18日 本来以为阿根廷.荷兰.科特迪瓦.塞黑是真正的死亡之组,但是2个回合就已经明朗了,塞黑的莫名其 妙.科特迪瓦的无谋之勇成就了该组的阿根廷.荷兰.荷兰胜科特迪瓦个总觉得不大地道. 凌晨的捷克V ...

  5. “死亡之星”——“阿波非斯”

    2029年科学家即恐惧又兴奋-- 一小行星撞向地球? ------------------------------------------------------------------------- ...

  6. 众筹,帮创业者跨过“死亡之谷”

    有人把创业的前三年叫作"死亡谷",但对创始人来说,也许上市前的这一段才是最黑暗的时候,就像一段隧道,你已走过三分之二,这时看不到前面的光亮,你自己也最没有信心."实际上, ...

  7. MH370残骸分析揭露坠机真相:入海前经历“死亡之坠”

    MH370残骸分析揭露坠机真相:入海前经历"死亡之坠" frameborder="0" scrolling="no" hspace=&quo ...

  8. 蚂蚁金服阳振坤:OceanBase如何跨越关系数据库的“死亡之谷”

    小蚂蚁说: 2018年10月15日,北京交通大学计算机与信息技术学院第71期CIT名师大讲堂在第九教学楼中心报告厅举行.蚂蚁金服高级研究员.OceanBase团队负责人阳振坤在本次学术报告中发表了题为 ...

  9. 阳振坤:OceanBase如何跨越关系数据库的“死亡之谷”

    OB君:2018年10月15日,北京交通大学计算机与信息技术学院第71期CIT名师大讲堂在第九教学楼中心报告厅举行.蚂蚁金服高级研究员.OceanBase团队负责人阳振坤在本次学术报告中发表了题为&l ...

  10. 用Python模拟欧冠小组抽签,一不小心把某队抽进死亡之组

    众所周知,如今的欧冠已经由32支球队组成的欧足联俱乐部顶级赛事,为了娱乐,鄙人专门写了一个欧冠小组赛分组抽签的小程序以图一乐. 素材来源 2020-2021赛季欧洲冠军联赛32强分档情况 一档:拜仁, ...

最新文章

  1. 【第23周复盘】懒癌犯了,拖到今天!
  2. localhost: Error: JAVA_HOME is not set. [Hadoop] Error: JAVA_HOME is not set
  3. ehcache + spring 整合以及配置说明 ,附带整合问题 (已解决)
  4. 图像二值形态学——腐蚀和膨胀的C语言实现
  5. Yii设置响应数据的样式与内容
  6. 使用Bootstrap开发网站首页
  7. Python:pyinstaller报错【A RecursionError maximum recursion depth exceeded occurred】
  8. //监测网络状态(AFNetworking) 服务端 客户端
  9. Override Fuction 调用——到底使用的是谁的函数
  10. 计算机和学数制和码制,[文学]第二章 计算机中的数制和码制.ppt
  11. AStar寻路2-性能优化
  12. linux内核分析与应用 -- 进程与线程(下)
  13. 打印机驱动下载后只能打印单面(设置双面打印)解决方法
  14. python批量检测域名和url能否打开
  15. 雷卯MOSFET场效应管对应品牌料号替代
  16. C#编程:常用数学函数
  17. python uniform()
  18. Echarts 生成地图html
  19. 计算机一级考试选择题1
  20. MySQL--多表连接(内连接、外连接、交叉连接--笛卡尔积)

热门文章

  1. 新手电脑硬件软件故障解答(三)
  2. 《电力电子技术》王兆安 第二章
  3. OpenDRIVE:学习文档
  4. 华硕飞行堡垒atk驱动在哪_双11福利大放送 11月8日华硕再开血拼狂欢模式
  5. 关于Eclipse优化记录
  6. 解决vscode中文乱码问题(不是改GBK,亲测有效)
  7. mysql的填充因子_SQL SERVER中,什么是填充因子?
  8. audio语音相关的基础知识-VAD,ASR,AEC,AGC,BF等
  9. jeecg框架 弹出框问题
  10. JEECG框架创建项目使用步骤