图解ARP协议(六)RARP与IARP:被遗忘的兄弟协议
一、概述
?
在我第一次接觸ARP協議的時候,發現這協議挺簡單的,"一去一回通過IP拿到MAC地址",整個過程在1s內就搞定了。后面學到了代理ARP,發現也不過是變了個法子,做了次"欺騙",本質還是一樣。接下來又學到了免費ARP,頓時覺得網絡協議設計者太牛了,一個協議居然能折騰出這么多玩法,連"地址檢測"都能實現。等學到了ARP嗅探和欺騙,又發現其實黑帽子更愛折騰,誰能想到這么簡單的協議,居然能制造工具出來做內網探測和欺騙攻擊,引發這么大的危害。
當我以為ARP這一知識點在我的技術旅途中應該就此翻篇了的時候,又冒出了RARP和IARP這兩,對比其他ARP協議的研究,當時學這兩個協議是心不甘情不愿的:
第一,無論學習還是工作,極少碰到,真正"翻篇"了的協議;
第二,名字記不住,"翻轉""反轉""逆向""反向",不同技術文檔的中文翻譯有時候完全相反,沒法記。畢竟漢語這么博大精深,就記住英文就好了,后面發現更加糟糕,因為reverse和inverse這兩個單詞僅僅2個字母之差,老外太欺負人了,這根本沒法記。
我在想,肯定也有很多朋友學到這個時候遇到了上面同樣的問題和糾結,有些堅持研究通透有些中途離開。然后我又思考了一番:ARP協議通過幾個字段的細微調整,便能夠適用于這么多不同場景,例如ARP、PARP、GARP、RARP、IARP,這是不是證明了它在TCP/IP協議棧里面獨特的位置,有哪個協議能做到這一點,有這么多花樣?所以,我的建議是:既然到了這一步了,就繼續搞清楚吧,不管它是否用得上。
那么,什么是RARP和IARP?中文叫法是什么?它們各自的應用場景在哪里?數據包又是怎樣的?
二、RARP原理與實踐
RARP(Reverse ARP)即反向ARP或者翻轉ARP,顧名思義,它跟常規的ARP功能恰恰是相反的,ARP是實現IP到MAC地址的映射,而RARP是實現MAC到IP地址的映射。
什么樣的設備或者場景需要用到RARP呢?其實RARP原先在設計的時候,是適用于大部分終端設備的,不僅僅是無盤工作站,它的功能就是根據MAC獲取IP地址,功能跟DHCP是一樣的。
例如,一個電腦剛接入網絡,沒有IP地址就無法上網,此時它便會通過本地MAC地址,對外發送RARP Request廣播請求,看看局域網里面是否有RARP Server,若Server上面有關于此MAC地址的映射IP,則會向此電腦返回RARP Reply回應,電腦便獲取了IP地址=>
?
RARP通過非常精簡的交互實現了IP地址的獲取,但同時也暴露了一些問題:
①RARP Server必須提前將MAC和IP的映射靜態綁定在本地;若沒有提前綁定,則電腦用自己MAC詢問時,Server也不會回應;
②RARP Server只能給電腦分配IP地址,不包括其他信息,包括網關、DNS等信息;
③RARP基于二層封裝,只能運行在同一網段;每個網段分配地址,都需要一個RARP Server。
在RARP的基礎上,后面又有了Bootp協議,直譯過來便是"啟動協議",功能同RARP,也是用于電腦接入網絡時,用來獲取IP地址的。但是畢竟做了增強,Bootp協議能讓電腦啟動時,不僅僅獲取IP地址,而且能獲取到網關地址,從而讓電腦實現跨網段通信。
?
Bootp協議雖然讓電腦能夠獲取到更多的信息,但是仍然沒有解決最大的問題:
服務器仍然需要提前手工綁定MAC和IP地址,而對于現在的移動網絡或者公共網絡而言,這根本無法實現。
因為用戶什么時候接入,接入的MAC是多少,管理員沒法提前知道。這就有了后面的DHCP,DHCP通過動態分配的方式解決了這個詬病,并且通過DHCP中繼技術實現了跨網段地址分配,實現了全網IP地址的統一管理。
小結:RARP是一種逝去的地址分配技術,是Bootp和DHCP的鼻祖,目前我們的電腦基本不會用到這個協議,只有部分無盤工作站等情況需要用到。
為了讓大家更深入理解RARP,這里我們從數據包結構來解構它的功能。RARP的數據包比較難抓取,不像常規的ARP和DHCP協議,這里給大家提供一個思路:對于比較難找的協議數據包,除了搭建特殊的實驗環境抓取之外,也可以借助一些[數據包生成工具]來實現,例如nmap掃描器里面集成的nping工具,可以生成非常多的協議包,包括arp、icmp、udp、tcp等等。
nmap的安裝以及nping的使用,可以到https://nmap.org/nping下查詢。這里給大家演示如何用nping生成rarp數據包,下圖是我們要"人為"構造出來的交互場景=>
?
我的Macbook已經安裝了nmap,自帶了nping工具,跟ARP/RARP相關的幫助命令如下:
jayking:~ jaykingchen$?nping
Nping 0.7.60 (?https://nmap.org/nping?)
Usage:?nping [Probe mode] [Options] {target specification}
TARGET SPECIFICATION:
? Targets may be specified as hostnames, IP addresses, networks, etc.
? Ex: scanme.nmap.org, microsoft.com/24, 192.168.0.1; 10.0.*.1-24
ARP/RARP PROBE MODE:
? --arp-type <type>??????????????? : Type: ARP, ARP-reply, RARP, RARP-reply.
? --arp-sender-mac <mac>?????????? : Set sender MAC address.
? --arp-sender-ip? <addr>????????? : Set sender IP address.
? --arp-target-mac <mac>?????????? : Set target MAC address.
? --arp-target-ip? <addr>????????? : Set target IP address.
為了能夠抓取到rarp的請求和回復包,首先打開wireshark抓取電腦網卡流量并設置arp過濾,然后采用兩條命令:第一條命令模擬我的電腦發起的RARP請求包,第二條命令模擬局域網網關設備(極路由)返回的RARP回復包。
jayking:~ jaykingchen$ sudo?nping --arp-type RARP ?--arp-sender-mac ac:bc:32:8b:56:df --arp-sender-ip 0.0.0.0 --arp-target-mac ac:bc:32:8b:56:df --arp-target-ip 0.0.0.0 192.168.199.255?
Starting Nping 0.7.60 (?https://nmap.org/nping?) at 2017-09-04 23:57 CST
SENT (0.0077s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF
SENT (1.0079s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF
SENT (2.0084s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF
SENT (3.0111s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF
SENT (4.0159s) RARP who is AC:BC:32:8B:56:DF? Tell AC:BC:32:8B:56:DF
Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 5 (210B) | Rcvd: 0 (0B) | Lost: 5 (100.00%)
Nping done: 1 IP address pinged in 5.02 seconds
jayking:~ jaykingchen$ sudo?nping --arp-type RARP-reply ?--arp-sender-mac d4:ee:07:54:c1:9e --arp-sender-ip 192.168.199.1 --arp-target-mac ac:bc:32:8b:56:df --arp-target-ip 192.168.199.153 192.168.199.153
Starting Nping 0.7.60 (?https://nmap.org/nping?) at 2017-09-05 00:03 CST
SENT (0.8094s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153
SENT (1.8107s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153
SENT (2.8114s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153
SENT (3.8138s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153
SENT (4.8159s) RARP reply: AC:BC:32:8B:56:DF is at 192.168.199.153
Max rtt: N/A | Min rtt: N/A | Avg rtt: N/A
Raw packets sent: 5 (210B) | Rcvd: 0 (0B) | Lost: 5 (100.00%)
Nping done: 1 IP address pinged in 5.82 seconds
此時,從Wireshark抓取到的RARP請求和回復包如下=>
?
?
至此,關于RARP的原理和數據包分析便完成了。
三、IARP原理與實踐
IARP(Inverse ARP)即逆向ARP,這個沒法"顧名思義",因為它既不是IP到MAC的映射,也不是MAC到IP的映射,而是DLCI到IP的映射。相比前面所有其他ARP協議,IARP的應用場景不是在以太網(局域網)里面,而是在幀中繼網絡(廣域網)里面。
?
要真正理解DLCI和IARP,需要有一些幀中繼網絡技術背景,這里簡單說下:
DLCI(Data Link Connection Identifier)數據鏈接連接標識,是幀中繼網絡里面的二層地址,好比以太網里面的MAC地址,用于標記幀中繼網絡里面的虛擬專線。示圖如下:
圖中R1和R2通過專線連接到幀中繼交換機,對應的DLCI號分別是102和201。交換機通過轉發表進行數據交換:根據接口收到數據包的DLCI,查看對應的接口,轉發到匹配的線路。
所以說,幀中繼網絡里面,DLCI類似MAC,決定了數據包的去向。那么,DLCI和IP的映射關系又是如何的呢?我們來看下幀中繼網絡里面的數據封裝,以R1 ping R2為例:
?
從這里我們可以看到幀中繼網絡的數據封裝和轉發模式都不同于以太網:
①二層封裝的時候,不需要源目地址,只需要本地DLCI;例如10.1.1.1 ping 10.1.1.2,源目IP地址這個跟以太網的封裝是一樣的,但是鏈路層封裝不需要目標DLCI 201。
②交換機會改變二層地址信息,例如這里的DLCI從左邊的102,變成了右邊的201。
理解了這些差異,我們才能得到這里DLCI和IP的映射關系:即目標IP地址與本地DLCI的映射。例如R1要訪問10.1.1.2,此時需要映射到本地的102;而R2要訪問10.1.1.1,則需要映射到本地的201。
更完整地說明:逆向ARP解決幀中繼網絡里目標IP地址與本地DLCI的映射,并且讓通信雙方生成幀中繼映射表(frame-relay map)。好比ARP解決了以太網里面目的IP與目標MAC的映射,并且讓通信方生成ARP映射表。
?
接下來,我們通過實驗環境來驗證,這里可以通過GNS3模擬器搭建以上環境,并且抓包驗證=>
?
①為R1和R2打開接口,封裝幀中繼,并配置IP地址:
R1(config)#int s0/0
R1(config-if)#no shutdown
R1(config-if)#encapsulation frame-relay
R1(config-if)#ip address 10.1.1.1 255.255.255.0
R2(config)#int s0/0
R2(config-if)#no shutdown
R2(config-if)#encapsulation frame-relay
R2(config-if)#ip address 10.1.1.2 255.255.255.0
② 開啟wireshark抓包,抓取IARP請求和回復包:
?
?
③查看R1和R2本地生成的IARP映射表:
R1#show frame-relay map
Serial0/0 (up):?ip 10.1.1.2 dlci 102(0x66,0x1860), dynamic,
????????????? broadcast,, status defined, active
R2#show frame-relay map
Serial0/0 (up):?ip 10.1.1.1 dlci 201(0xC9,0x3090),?dynamic,
????????????? broadcast,, status defined, active
④測試R1和R2之間的聯通并抓取ICMP包:
R1#ping 10.1.1.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.1.2, timeout is 2 seconds:
!!!!!
Success rate is 100 percent (5/5), round-trip min/avg/max = 68/75/88 ms
?
至此,IARP的原理與實踐并完成了。那么,既然IARP能夠實現幀中繼的通信,為什么在文章開頭,我們提到說IARP跟RARP一樣,在工作中已經不常見了呢?
①幀中繼作為一種廣域網遠程連接技術,正在慢慢被其他技術代替;
②IARP不像ARP協議可以實時交互,它是周期性運行的,通信雙方若丟失IARP映射表,則需要等待到固定的時間交互才能重新生成并通信。另外不同廠商不同型號對IARP的兼容性也可能不同。基于這些原因,一般建議直接關閉IARP協議,采用靜態綁定的方式生成映射表,這里不再深入。(有興趣的小伙伴可以觀看我之前的技術視頻教程,有深入講解了如何關閉IARP和靜態綁定的做法。)
四、RARP與IARP協議總結
①RARP用于實現MAC到IP的映射,本質就是為了獲取IP地址,是Bootp和DHCP協議的鼻祖;
②IARP用于實現幀中繼網絡中DLCI到IP地址的映射,生成幀中繼映射表(類似ARP表),實現數據封裝與通信;
③相比ARP、免費ARP、代理ARP、ARP攻防等技術,RARP和IARP隨著技術的更新迭代正在退出歷史舞臺,成為"被遺忘的兄弟協議"?。(對于初學者來說,也算是個好事,因為終于不用"翻轉""反向""逆向"各種分不清了)
ARP協議大總結及下一階段預告
到這里,我們通過六篇文章終于搞定了ARP協議的方方面面,包括它們的應用場景、設計思想、數據包結構、實驗驗證等等。
另外,為什么這次圖解系列的開頭是從ARP協議開始寫,而不是從Ethernet、IP、TCP、HTTP或其他呢?
主要是因為"ARP太簡單了",簡單到大家在學網絡和安全的時候,都容易去忽略協議背后的很多細節,例如很多人認為[ARP的請求就一定是廣播的,回復就一定是單播的],但"常識"背后也有另外一些特殊的情況。所以,通過這一個足夠簡單的協議,為大家解構背后相對復雜的機制,為后續深入研究開個好頭。
另外一個原因就是"ARP很有趣",例如協議設計者通過不同的操作代碼(opcode),做了非常多的變種(arp是1和2,rarp是3和4,iarp是8和9),做一個模型便可以多處應用;而且通過精巧的構造,就可以在內網造成極大的殺傷力。
anyway,圖解ARP協議只是整個系列的開篇,下一階段,我們將進入IP協議,探討IP協議原理、數據包結構、優缺點、地址結構、IP攻擊與防御(分片攻擊、欺騙攻擊)……
?
總結
以上是生活随笔為你收集整理的图解ARP协议(六)RARP与IARP:被遗忘的兄弟协议的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图解ARP协议(五)免费ARP:地址冲突
- 下一篇: 图解ARP协议(四)代理ARP原理与实践