更新啦! 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命令可以用來做什麼↓

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

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

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

ICMP是如何工作的

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

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

ping是如何工作的

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

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

死亡之ping

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

開啟電腦的終端。透過

man ping

命令,我們可以看到ping命令的詳細使用方法,其中

-s

可以指定傳送包的大小,

-i

指定傳送的包的頻率,這兩個正是我們想要的,因為首先我們需要傳送足夠大的資料包從而能撐爆對方的頻寬,其次每秒ping一次可不夠,我們最好要每秒ping他個上千次,這樣才更有可能阻塞對方的網路。

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

如果不指明,預設傳送64位元組ICMP資料以及8位元組的icmp頭部

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

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

另外,以上的方法只使用linux或者mac系統,windows據說是這麼寫的

ping -l 65500 -t ip地址

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

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

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

檢視我手機的內網ip,這裡我用的是termux軟體

然後在你的電腦上輸入

sudo ping ***。***。***。*** -i 0。01 -s 65500

,這個意思就是說,每0。01秒給我的手機發送一個大小65500位元組的icmp包。然後按回車:

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

於是可以看到,我手機的流量蹭蹭蹭的漲上去了,等十秒以後,我就連不上百度了。。。

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

按ctrl+c停止攻擊後,手機再次恢復了平靜

後記:

當然,這種攻擊方法還有很多新花樣,比如仿造對方ip傳送,讓區域網下的電腦都收到對方的ping request,從而讓整個區域網ping reply對方的電腦,或者動動腦子在內網搞個大鬧天宮,我點到為止。

同樣,除了icmp攻擊,類似的攻擊方法還有udp攻擊,tcp攻擊。本人菜鳥,具體是不是叫這個名兒我不知道瞎說的別信。

我一直覺得,學習計算機和學習魔法有非常多的相似之處。在霍格沃茲,學生學習一系列的咒語來召喚出潛藏在魔杖中的魔力,而我們,學習一系列的編碼,程式碼(code)來召喚出計算機中的算力,從而為我們所用,造福人類,to make the world a better place是所有程式設計師的信條。所以,當你學了更多的知識,當你有了更強大的魔力以後,不要試圖去做伏地魔,就像谷歌喊出的口號————-don‘t be evil!(不作惡!)