ARP協議以及獲取MAC腳本

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中代替地址解析協議。

功能:
OSI模型把網絡工作分爲七層,IP地址在OSI模型的第三層,MAC地址在第二層,彼此不直接打交道。在通過以太網發送IP數據包時,需要先封裝第三層(32位IP地址)、第二層(48位MAC地址)的報頭,但由於發送時只知道目標IP地址,不知道其MAC地址,又不能跨第二、三層,所以需要使用地址解析協議。使用地址解析協議,可根據網絡層IP數據包包頭中的IP地址信息解析出目標硬件地址(MAC地址)信息,以保證通信的順利進行。

原理:
工作過程
主機A的IP地址爲192.168.1.1,MAC地址爲0A-11-22-33-44-01;
主機B的IP地址爲192.168.1.2,MAC地址爲0A-11-22-33-44-02;

當主機A要與主機B通信時,地址解析協議可以將主機B的IP地址(192.168.1.2)解析成主機B的MAC地址,以下爲工作流程:

第1步:根據主機A上的路由表內容,IP確定用於訪問主機B的轉發IP地址是192.168.1.2。然後A主機在自己的本地ARP緩存中檢查主機B的匹配MAC地址。

第2步:如果主機A在ARP緩存中沒有找到映射,它將詢問192.168.1.2的硬件地址,從而將ARP請求幀廣播到本地網絡上的所有主機。源主機A的IP地址和MAC地址都包括在ARP請求中。本地網絡上的每臺主機都接收到ARP請求並且檢查是否與自己的IP地址匹配。如果主機發現請求的IP地址與自己的IP地址不匹配,它將丟棄ARP請求。

第3步:主機B確定ARP請求中的IP地址與自己的IP地址匹配,則將主機A的IP地址和MAC地址映射添加到本地ARP緩存中。

第4步:主機B將包含其MAC地址的ARP回覆消息直接發送回主機A。

第5步:當主機A收到從主機B發來的ARP回覆消息時,會用主機B的IP和MAC地址映射更新ARP緩存。本機緩存是有生存期的,生存期結束後,將再次重複上面的過程。主機B的MAC地址一旦確定,主機A就能向主機B發送IP通信了。
這裏寫圖片描述

注意到源MAC地址、⽬目的MAC地址在以太⽹網⾸首部和ARP請求中各出現⼀一次,對於鏈路層
爲以太⽹網 的情況是多餘的,但如果鏈路層是其它類型的⽹網絡則有可能是必要的。
硬件類型指鏈路層⽹網絡類型,1爲以太⽹網,協議類型指要轉換的地址類型,0x0800爲IP地址,後
⾯面兩個地址長度對於以太⽹網地址和IP地址分別爲6和4(字節),op字段爲1表⽰示ARP請求,op字段
爲2表⽰示ARP應答。

下⾯面舉⼀一個具體的例⼦子。 請求幀如下(爲了清晰在每⾏行的前⾯面加了字節計數,每⾏行16個字節):
以太⽹網⾸首部(14字節)
0000: ff ff ff ff ff ff 00 05 5d 61 58 a8 08 06
ARP幀(28字節)
0000: 00 01
0010: 08 00 06 04 00 01 00 05 5d 61 58 a8 c0 a8 00 37
0020: 00 00 00 00 00 00 c0 a8 00 02
填充位(18字節)
0020: 00 77 31 d2 50 10
0030: fd 78 41 d3 00 00 00 00 00 00 00 00
以太⽹網⾸首部:⽬目的主機採⽤用⼴廣播地址,源主機的MAC地址是00:05:5d:61:58:a8,上層協議類
型0x0806表⽰示ARP。
ARP幀: 硬件類型0x0001表⽰示以太⽹網,協議類型0x0800表⽰示IP協議,硬件地址(MAC地址)長度
爲6,協議地址(IP地址)長度爲4,op爲0x0001表⽰示請求⽬目的主機的MAC地址(arp),源主機
MAC地址 爲00:05:5d:61:58:a8,源主機IP地址爲c0 a8 00 37(192.168.0.55),⽬目的主機MAC地址全
0待填寫,⽬目的主機IP地址爲c0 a8 00 02(192.168.0.2)。
BIT科技僅限於學習交流

編寫arp腳本抓取對應主機mac地址

首先touch一個名爲test.sh的文件
腳本中用#進行註釋

文件代碼如下:

#!/bin/bash

net='192.168.1.'#這個是當前主機IP地址的前部分,通過指令ifconfig獲取
i=1#i表示IP地址的最後三位

count=0
while [ $i -le 254 ]#三位進制數最大可表示0-255,去掉0和ff剩下254個數
do
    if [ $count -eq 20 ];then#每隔20個地址ping一次,sleep1秒
    count=0
    sleep 1
    fi
    ping -c1 $net$i &
    let i++
    let count++
done

wait
echo '###################################################'
arp -a | grep -v 'incomplete'#打印所有不包含incomplete的IP地址和對應MAC地址
echo '###################################################'

這樣一個arp腳本就寫完成了,但因爲當前文件只是一個普通文件,並不能直接運行,因此執行指令 chmod u+x test.sh ,當前文件就會變成一個可執行文件,./test.c 運行當前文件就可以抓取當前局域網內對應主機的MAC地址了。

更詳細解釋:http://blog.csdn.net/Payshent/article/details/73659100

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章