自從學了計算機網路,室友終於不在半夜打遊戲了-- ping/ICMP學以致用

更新啦! 2018-3-23 1:29AM

一些同學想讓我寫一篇arp攻擊的文章,做了點功課,先對編程工具寫了一篇介紹,供大家參考:

DeepWeaver:通過擺弄python scapy模塊 了解網路模型--Get your hands dirty!

後續會通過介紹的這幾種方法試著寫一個arp欺騙的程序,大家的點贊是我繼續寫下去的動力!

3-24晚

噹噹噹噹

室友不敢深夜打遊戲篇二:如何用python-scapy進行arp欺騙


原文:

相信很多好好學習天天睡覺的寶寶,經常會有這樣的苦惱:凌晨兩點,隔壁床遊戲打得正酣,機械鍵盤啪啪的響,嘴裡不時吼道「又撿到一個二級頭。我x這貨開掛了吧,舉報舉報。。。」你心裡可能恨恨地想著:撿你個頭,舉報你個頭,我特么才要舉報你呢,大晚上的不睡覺,...(此處省去30字髒話)。好吧,總之,你可能想過,我要是有個辦法能讓他或她斷網就好了......

今天在學習ICMP協議(Internet Control Message Protocol)的時候,做到了一道題,問ping命令可以用來做什麼↓

其中第三個選項說: 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),回復了就意味著網路是通的,沒回復就是哪裡出問題了。

  • ICMP是如何工作的

假如小明是路由(router),你給小紅(host)寫了份情書(ip packet),但是不曉得怎麼被小明撿到了,不知所措的小明心想肯定是郵遞員弄錯了吧,他很好心的想把信件送還給你,但是由於你對小紅實在情深意切,寫的東西太多,而小明只想告訴你發送失敗了,再發一次,而沒必要告訴你,你自己究竟寫的是什麼鬼話,於是他把你的信封保留了(ip頭部),還把你的信撕得只留下八個位元組(讓你知道哦原來是我寫的千萬封情書中的哪一封),然後,小明在你的舊信封上套了個ICMP牌子的大信封,還在大信封里寫了張紙條,這是什麼類型什麼編碼的icmp(見上圖type,code欄),署名發信地為小明的ip,收件人為你的ip。

  • ping是如何工作的

有一天,你惹小紅生氣了,她一連好幾天好幾天不理你,於是你想寫封信問候一下她,但是又怕說錯話惹得她更加生氣,於是你寫了封簡短的icmp,標號8、0代表這是用於"echo request",只是想看看小紅在家不,並不想打擾到她。小紅家的管家接到了你的信,啥也沒說,把一封」echo replay"的icmp回信發還給了你。於是你就知道小紅好著呢!只是不想理你~

  • 死亡之ping

言歸正傳,我們來看看用什麼方法可以讓舍友斷子絕孫,哦不,不能上網!

打開電腦的終端。通過 man ping 命令,我們可以看到ping命令的詳細使用方法,其中-s可以指定發送包的大小,-i指定發送的包的頻率,這兩個正是我們想要的,因為首先我們需要發送足夠大的數據包從而能撐爆對方的帶寬,其次每秒ping一次可不夠,我們最好要每秒ping他個上千次,這樣才更有可能阻塞對方的網路。

如果不指明,默認發送64位元組ICMP數據以及8位元組的icmp頭部

注意間隔如果低於0.2秒一次需要超級用戶許可權,所以我們最後需要sudo+命令

另外,以上的方法只使用linux或者mac系統,windows據說是這麼寫的ping -l 65500 -t ip地址

好吧,重點來了,首先躺槍的是我的手機。

這裡提醒一下,這種方法有效的前提是你們都在一個區域網下,比如你們連的都是校網。

查看我手機的內網ip,這裡我用的是termux軟體

然後在你的電腦上輸入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是所有程序員的信條。所以,當你學了更多的知識,當你有了更強大的魔力以後,不要試圖去做伏地魔,就像谷歌喊出的口號-------dont be evil!(不作惡!)


推薦閱讀:

從一個指針的聲明淺談和函數、數組有關的指針
很少人知道的,電腦原生工具
當"老經驗"遇到"新場景"——學習方式的陷阱
計算機科班出身的優勢是什麼
滿分文書大全|如何寫一份招生官都拒絕不了的CS文書

TAG:計算機網路 | 黑客Hacker | 計算機專業 |