困扰
相信很多好好学习天天睡觉的宝宝,经常会有这样的苦恼:凌晨两点,隔壁床游戏打得正酣,机械键盘啪啪的响,嘴里不时吼道“又捡到一个二级头。我x这货开挂了吧,举报举报。。。”你心里可能恨恨地想着:捡你个头,举报你个头,我特么才要举报你呢,大晚上的不睡觉,...(此处省去30字脏话)。好吧,总之,你可能想过,我要是有个办法能让他或她断网就好了......
今天在学习ICMP协议(Internet Control Message Protocol)的时候,做到了一道题,问ping命令可以用来做什么↓
学了这个,室友终于不在半夜打游戏了-- ping/ICMP学以致用其中第三个选项说: ping can be maliciously used as a way to attack a machine by flooding it with ping requests.通过大量的ping请求,ping可以被恶意地用作一种攻击方式。
做完这道题的时候,我虎躯一震,抖擞起了原本因为晚上没睡好而萎靡的精神。对啊,如果我死命的ping对方,对方是不是就上不了网了?即使能让对方的网络变卡也行。
其实这是一种网络攻击方式,它有种酷酷的名称,叫“死亡之ping”, 英文为"ping flooding"(像洪水一样ping对方,直到对方淹死在你的icmp里)
什么是ICMP
要了解什么是ping flooding,我们先要了解ping是什么,要了解ping,则首先要了解什么是ICMP。
提起ICMP,一些人可能会感到陌生,实际上,ICMP与我们息息相关。在网络体系结构的各层次中,都需要控制,而不同的层次有不同的分工和控制内容,IP层的控制功能是最复杂的,主要负责差错控制、拥塞控制等,任何控制都是建立在信息的基础之上的,在基于IP数据报的网络体系中,网关必须自己处理数据报的传输工作,而IP协议自身没有内在机制来获取差错信息并处理。为了处理这些错误,TCP/IP设计了ICMP协议,当某个网关发现传输错误时,立即向信源主机发送ICMP报文,报告出错信息,让信源主机采取相应处理措施,它是一种差错和控制报文协议,不仅用于传输差错报文,还传输控制报文。 ------摘自网络
总之,简单来说,icmp首先可以用于所谓的“差错报文”,就是发送出问题时对方回复你“这里出问题了,没送到!”,比如下表:没到达应到的网络-->icmp报错;包在网络中迷路过期了-->icmp错误。第二则用于“控制报文”,比如我们总说某个网络能不能ping通,那么我们实际是看,我们给某个ip发一个icmp(echo request),看它会不会回复我们一个icmp(echo reply),回复了就意味着网络是通的,没回复就是哪里出问题了。
学了这个,室友终于不在半夜打游戏了-- ping/ICMP学以致用ICMP是如何工作的
(鼠标写字,有点丑,凑活看)
学了这个,室友终于不在半夜打游戏了-- ping/ICMP学以致用假如小明是路由(router),你给小红(host)写了份情书(ip packet),但是不晓得怎么被小明捡到了,不知所措的小明心想肯定是邮递员弄错了吧,他很好心的想把信件送还给你,但是由于你对小红实在情深意切,写的东西太多,而小明只想告诉你发送失败了,再发一次,而没必要告诉你,你自己究竟写的是什么鬼话,于是他把你的信封保留了(ip头部),还把你的信撕得只留下八个字节(让你知道哦原来是我写的千万封情书中的哪一封),然后,小明在你的旧信封上套了个ICMP牌子的大信封,还在大信封里写了张纸条,这是什么类型什么编码的icmp(见上图type,code栏),署名发信地为小明的ip,收件人为你的ip。
ping是如何工作的
学了这个,室友终于不在半夜打游戏了-- ping/ICMP学以致用有一天,你惹小红生气了,她一连好几天好几天不理你,于是你想写封信问候一下她,但是又怕说错话惹得她更加生气,于是你写了封简短的icmp,标号8、0代表这是用于"echo request",只是想看看小红在家不,并不想打扰到她。小红家的管家接到了你的信,啥也没说,把一封”echo replay"的icmp回信发还给了你。于是你就知道小红好着呢!只是不想理你~
死亡之ping
言归正传,我们来看看用什么方法可以让舍友断子绝孙,哦不,不能上网!
打开电脑的终端。通过 man ping 命令,我们可以看到ping命令的详细使用方法,其中-s可以指定发送包的大小,-i指定发送的包的频率,这两个正是我们想要的,因为首先我们需要发送足够大的数据包从而能撑爆对方的带宽,其次每秒ping一次可不够,我们最好要每秒ping他个上千次,这样才更有可能阻塞对方的网络。
学了这个,室友终于不在半夜打游戏了-- ping/ICMP学以致用如果不指明,默认发送64字节ICMP数据以及8字节的icmp头部
学了这个,室友终于不在半夜打游戏了-- ping/ICMP学以致用注意间隔如果低于0.2秒一次需要超级用户权限,所以我们最后需要sudo+命令
另外,以上的方法只使用linux或者mac系统,windows据说是这么写的ping -l 65500 -t ip地址
操作一波
重点来了,首先躺枪的是我的手机。
这里提醒一下,这种方法有效的前提是你们都在一个局域网下,比如你们连的都是校网。
查看我手机的内网ip,这里我用的是termux软件(应用商店有很多)
学了这个,室友终于不在半夜打游戏了-- ping/ICMP学以致用然后在你的电脑上输入sudo ping ***.***.***.*** -i 0.01 -s 65500 ,这个意思就是说,每0.01秒给我的手机发送一个大小65500字节的icmp包。然后按回车:
于是可以看到,我手机的流量蹭蹭蹭的涨上去了,等十秒以后,我就连不上百度了。。。
按ctrl+c停止攻击后,手机再次恢复了平静
后记:
当然,这种攻击方法还有很多新花样,比如仿造对方ip发送,让局域网下的电脑都收到对方的ping request,从而让整个局域网ping reply对方的电脑,或者动动脑子在内网搞个大闹天宫,点到为止。
同样,除了icmp攻击,类似的攻击方法还有udp攻击,tcp攻击。本人菜鸟,具体是不是叫这个名儿我不知道,瞎说的别信。
我一直觉得,学习计算机和学习魔法有非常多的相似之处。在霍格沃兹,学生学习一系列的咒语来召唤出潜藏在魔杖中的魔力,而我们,学习一系列的编码,代码(code)来召唤出计算机中的算力,从而为我们所用,造福人类,to make the world a better place是所有程序员的信条。所以,当你学了更多的知识,当你有了更强大的魔力以后,不要试图去做伏地魔,就像谷歌喊出的口号-------don't be evil!(不作恶!)
学了这个,室友终于不在半夜打游戏了-- ping/ICMP学以致用哈哈哈(ಡωಡ),感谢你看到了最后,上边是Espresso(意式浓缩),喜欢咖啡的朋友可以试试,炒鸡苦,味道很浓,得赞一个。
网友评论