Python寫ARP區域網主機存活掃描與ARP欺騙工具

青衫無名發表於2018-03-15

起源

最近一直在研究網路協議,為了加深理解就自己構造了資料包傳送並用抓包工具進行分析,在研究arp協議時順便寫了一個簡單的類似網路剪刀手的小指令碼用於測試,下面開始我們的arp研究吧。

簡單協議分析

網路協議大致分為應用層•傳輸層•網路層•鏈路層,以http為例,傳輸層封裝tcp頭,網路層封裝ip頭,鏈路層封裝以太頭(如下圖所示),而arp報文就是包含在鏈路層以太幀的資料包裡面,下面我們來講講以太幀格式。

640?wx_fmt=jpeg&tp=webp&wxfrom=5&wx_lazy

以太幀

以太幀工作在鏈路層,以太幀格式多達五種,但今天的tcp/ip應用都是用Ethernet V2格式,下面我們分析Ethernet V2格式(如圖),各資料段的解釋圖上也標出來了,其中“型別”是指明上層協議,0x800代表網際協議,0x0806代表arp協議

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

下面我用wireshark抓一個arp回覆包來分析一下是否能與上面資料格式對應上(如下面截圖)此處wireshark把前導碼與CRC包給丟棄了,截圖中的“資料”裡面就包含著我們要研究的arp報文640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

Arp報文資料結構的研究

Arp報文資料結構就是對上面截圖中“資料”的具體研究,arp報文格式如下圖,操作型別有四種,這裡只講arp的兩種:1表示傳送的包為請求包,2表示傳送的包為回覆包:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

下面我用wireshark對上面截圖“資料”展開進行研究:640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

好,說了這麼多我們下面來講講arp欺騙的原理吧!

Arp欺騙

兩臺計算機通訊需要ip地址與mac地址,此時把兩臺計算機當作快遞的起始站和終點站,要傳送的資料當作你要郵寄的物品,那麼ip地址就相當於起始站的寄件地址和終點站的收件地址,而mac地址就相當於中間要經過的中轉站地址。當一個資料發出後,要經過一個一個mac中轉站才能到達終點站。 

(1)此時如果你把起始站要發往中轉站的mac地址改為你的mac地址,那麼起始站的資料包就直接發到你手中,如果你做一個路由轉換,再轉換到正確的mac地址,那麼起始站能正常收發郵件,而你卻能看其中的內容,如果不做路由轉換便實現了斷網功能 

(2)如果你把mac中轉站(閘道器)要發往起始站的mac地址改為你的mac地址,那麼回覆的請求包就發到你手中,起始站就得不到回覆包,實現斷網功能。 

方法一是欺騙目標機,修改目標機的mac快取表,如果目標機有arp防火牆便成功不了; 

方法二是欺騙路由器,修改路由器的mac快取表,即使目標機有arp防火牆,也能實現斷網功能,因為目標機的mac快取表並沒有修改 

Arp協議是一個不安全的協議,只要你傳送資料包就能修改目標的mac快取表,基於這種不安全性,便能實現arp欺騙。

Python寫arp欺騙工具

思路(及資料包的構造):不斷髮送修改對方mac快取表的arp

欺騙目標機:以太頭:本機mac•目標機mac資料(Arp包):目標機mac•目標機ip•操作型別請求或回覆都行•本機mac•閘道器ip

欺騙路由器:以太頭:閘道器mac•本機mac資料(arp包):閘道器mac•閘道器ip•操作型別請求或回覆都行•本機mac•目標機ip

Arp主機存活掃描

遍歷你要掃描的ip段地址併傳送一個廣播mac地址的請求包,收到回覆則代表這臺主機存活,並列印其ip地址及mac地址,用於arp欺騙。

Python寫掃描工具

思路:

以太頭:本機mac•ff:ff:ff:ff:ff:ff

資料:00:00:00:00:00:00(因為不知道目標mac於是用0填充)•目標機ip(一個一個遍歷)•操作型別請求•本機mac•本機ip

具體程式碼如下:

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=


程式碼效果(以欺騙目標機為例):

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

注意

使用arp欺騙路由器時,不能用本機和虛擬機器做路由欺騙實驗,因為無論你怎麼分配虛擬機器mac地址,在路由器上的mac快取表中本機和虛擬機器mac地址都是用的本機mac地址,如下圖

640?wx_fmt=png&tp=webp&wxfrom=5&wx_lazy=

原文釋出時間為:2016-12-03 

本文作者:exploit

本文來自雲棲社群合作伙伴“Python中文社群”,瞭解相關資訊可以關注“Python中文社群”微信公眾號


相關文章