ARP協議DPI深度解析

2021-08-19 18:39:08 字數 1624 閱讀 4983

結構ether_header定義了乙太網幀首部;結構arphdr定義了其後的5個字段,其資訊用於在任何型別的介質上傳送arp請求和回答;ether_arp結構除了包含arphdr結構外,還包含源主機和目的主機的位址。

定義乙太網首部:

typedef struct ehhdr 

ehhdr, *pehhdr;

定義乙太網arp欄位:

typedef struct arphdr

arphdr, *parphdr;

arp應答報文會將自己的 mac + ip 填在傳送端資訊中;將請求端的 mac + ip 填在目的端資訊中;即對調arp請求報文中的資訊。

根據以上結構可以定義整個arp報文包,總長度42位元組:

typedef struct arppacket

arppacket, *parppacket;

根據定義,頭6個位元組是乙太網目的位址 ff ff ff ff ff ff 這是乙個廣播位址,全網下的所有終端都能接收到,緊跟著的6個位元組是乙太網源位址,即傳送者的mac位址( 00 0c f1 d4 d9 60 是我的mac位址)。幀型別0806佔兩個位元組,到這裡乙太網幀頭就結束了。0806指的是後面的資料是屬於arp包的。

接著分析arp包頭。頭兩個位元組是硬體型別 00 01,接著兩個位元組是協議型別,即arp使用的是ip協議代號08 00。硬體位址長度和協議位址長度分別是6和4。這與arp報文格式是對應的。後面的2個位元組op指示當前包是請求包還是應答包,對應的值分別是0x0001和0x0002。原始資料裡是00 01所以這是乙個請求包,然後6個位元組又是傳送者mac位址00 0c f1 d4 d9 60 ,後面4個位元組是傳送者ip位址c0 a8 01 0f ,轉換成點分十進位制格式即192.168.1.15,這是我的ip,接下來的6個位元組留空,00 00 00 00 00 00 在arp請求包裡也可以是其他資料,因為稍後ip位址為c0 a8 01 02 (192.168.1.2)會把自己的mac位址填充進這6個位元組中。

填充完後,arp包裡的傳送者硬體位址|目標硬體位址和乙太網首部的乙太網目的位址|乙太網源位址正好對調。最後把這個封裝好的arp包傳送出去,這樣乙個來回就可以讓兩台終端互相知道對方的ip和mac。

利用wireshark抓包如下:

linux 定義arp協議報文結構如下:

arp協議解析

1.首先,主機a想要向主機b傳送訊息,但它不知道主機b的mac位址,只知道主機b的ip位址。這時,主機a會在當前區域網下以廣播的形式傳送arp請求資料報,表示主機a想知道主機b的mac位址 注 廣播時,乙太網首部的目的位址為全f 2.由於是廣播,所以在本區域網上的所有主機都會受到主機a傳送的arp資...

ARP協議解析

位址解析協議,是通過解析網路層位址 ipv4,ipv6 來尋找資料鏈路層位址的乙個在網路協議包中非常重要的網路傳輸協議。arp屬於資料鏈路層協議。在乙太網協議中規定,同一區域網中的一台主機要和另一台主機進行直接通訊,必須要知道目標主機的mac位址。而在tcp ip協議中,網路層和傳輸層只關心目標主機...

ARP協議 位址解析協議

網路層使用的是ip位址,但實際網路的鏈路上傳送資料幀時,最終還是必須使用該網路的硬體位址。arp快取記憶體 ip位址到硬體位址的對映表 那麼一台主機 a 是如何獲知本區域網內其他主機或路由的硬體位址的?主機a廣播arp請求分組 我的ip是 硬體位址是 請告知我ip位址為 主機的硬體位址。本區域網內的...