ARP協議
基本概念
地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址的一個TCP/IP協議。
主機發送信息時將包含目標IP地址的ARP請求廣播到網絡上的所有主機,並接收返回消息,以此確定目標的物理地址
收到返回消息後將該IP地址和物理地址存入本機ARP緩存中並保留一定時間,下次請求時直接查詢ARP緩存以節約資源。
地址解析協議是建立在網絡中各個主機互相信任的基礎上的,網絡上的主機可以自主發送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存
由此攻擊者就可以向某一主機發送僞ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙。
ARP命令可用於查詢本機ARP緩存中IP地址和MAC地址的對應關係、添加或刪除靜態對應關係等。相關協議有RARP、代理ARP。NDP用於在IPv6中代替地址解析協議。
ARP報文字段的含義
(1)硬件類型
佔2個字節,表明ARP實現在何種類型的網絡上。
若值爲1:表示以太網。
(2)協議類型
佔2個字節,表示要映射的協議地址類型。
IP:0800
(3)硬件地址長度
佔1個字節,表示 MAC地址長度,其值爲6個字節。
(4)協議地址長度
佔1個字節,表示IP地址長度,此處值4個字節
(5)操作類型
佔2個字節,表示ARP數據包類型。
若值爲1表示ARP請求。
若值2表示ARP應答。
(6)源MAC地址
佔6個字節,表示發送端MAC地址
(7)源IP地址
佔4個字節,表示發送端IP地址
(8)目的以太網地址
佔6個字節,表示目標設備的MAC物理地址
(9)目的IP地址
佔4個字節,表示目標設備的IP地址.
注意:在ARP操作中,有效數據的長度爲28個字節,不足以太網的最小長度46字節長度,需要填充字節,填充字節最小長度爲18個字節
用Shell腳本編寫ARP抓取局域網中的MAC主機
代碼
#!/bin/bash
#定義ip_head變量,並對該變量賦值
ip_head='192.168.190.'
#定義i變量
i=1
#定義proc_count變量
proc_count=0
#依次循環,i從1到255
#le表示小於或等於254
while [ $i -le 254 ]
do
#當超過20個時,進行重置,並睡眠3秒鐘
if [ $proc_count -ge 20 ];then
proc_count=0
sleep 3
#fi相當於end if
#即爲終止if的條件判斷
fi
#依次ping 該地址
ping -c1 ${ip_head}$i &
let i++
let proc_count++
done
wait
echo "####################################"
arp -a | grep -Ev 'incomplete|grep'
echo "####################################"