|
打开终端,发送敲下 `ping 192.168.1.1 -t`,数据回车。包轰屏幕上开始滚动一行行回复,发送时间稳定在 1ms 以内——这是数据局域网,快得理所当然。包轰但如果把目标换成一个公网 IP,发送再把 `-t` 换成 `-l 65500`,数据事情就变了。包轰数据包从 32 字节膨胀到 65500 字节,发送接近 IP 协议允许的数据上限。一个包出去,包轰对方回一个,发送看起来没什么。数据可要是包轰开十个窗口同时跑呢? 我头一回意识到 ping 能“轰炸”,是 2016 年在学校机房。隔壁桌的同学嫌隔壁宿舍打游戏太吵,直接 ping 了他们路由器。命令很简单:`ping 10.0.0.1 -l 65500 -t`。不到两分钟,那间宿舍的网全断了。交换机指示灯狂闪,像发了疯。他用的就是最普通的 Windows 命令行,没装任何工具。那时候我才明白,ping 本身不是攻击,但量变能引起质变。 原理不复杂。ICMP 协议设计出来是给网络诊断用的,echo request 发出去,echo reply 回来,一来一回测延迟。可每个包都要占带宽、耗 CPU。65500 字节的包,在百兆网上就是 0.5 毫秒的传输时间,听起来微不足道。但 ping 默认间隔是 1 秒,你可以用 `-w` 调超时,用 `-n` 调次数,甚至写个循环脚本,间隔缩到 0。一个包 64KB,一千个包就是 64MB,瞬间灌满一条 ADSL 上行。对方路由器要处理这些包,CPU 占用率飙到 100%,正常数据包排队都排不上。 更狠的是分布式。一个人 ping 是毛毛雨,一百个人同时 ping 呢?2014 年有个叫“Ping 轰炸机”的小工具,界面简陋,就一个输入框填 IP,一个滑块调频率。但它能调用多线程,把本机所有网络接口都用上。我试过对着自家路由器跑,五秒钟后路由器管理页面打不开了。拔电源才恢复。后来查日志,ICMP 包把 NAT 表撑爆了。 不过,拿 ping 去轰炸公网 IP,基本是自残。运营商的骨干路由器早就不吃这套了。ICMP 包优先级最低,QoS 一限速,你发一万个包,能过去十个算不错。而且现在很多服务器直接禁 ping,echo request 进来就丢。你这边带宽跑满,对方毫无感觉。真正有效的场景是局域网——学校、公司、网吧。内部网络设备老,交换机背板带宽小,几十台机器一起 ping 同一台设备,立马瘫痪。 有个做运维的朋友跟我讲过一件事。他们公司测试新防火墙,让实习生写脚本压测。实习生图省事,直接 `ping -f -l 65500` 打网关。`-f` 是“不分片”标志,包大了过不去,但路由器得反复重组。结果网关 CPU 温度报警,整层楼断网半小时。后来查原因,就是 ICMP 风暴把管理接口堵死了。防火墙本身没挂,但管理通道进不去,等于失联。 所以 ping 轰炸这事,技术含量低,效果看环境。公网打不动,内网一打一个准。Windows 自带命令就能干,连 Python 都不用写。但真要干,得想清楚:你是在测网络,还是在搞破坏。前者叫诊断,后者叫攻击。法律上,持续大量发送 ICMP 包导致服务中断,够得上破坏计算机信息系统罪。2018 年有个案子,有人用 ping 洪水打游戏私服,判了六个月。 我现在偶尔还会用 `ping -l 1472 -f` 来测 MTU,这是正经用途。1472 加上 28 字节包头正好 1500,不分片能通,说明路径 MTU 没问题。但要是把 `-t` 加上,再开十个窗口,那就是另一回事了。命令行很诚实,你输入什么,它就执行什么。区别只在于,你知不知道自己在干什么。 |