Wireshark抓包ARP协议分析 - 鲨鱼抓包
首页 博客文章 Wireshark抓包ARP协议分析

Wireshark抓包ARP协议分析

日期: 2022年5月20日 19:28
阅读: 74
作者: 鲨鱼抓包

摘要: ARP全称为Address Resolution Protocol地址解析协议,用来实现IP地址到MAC地址的映射。ARP拥有5中不同类型的分类【ARP、代理ARP、逆向ARP、免费ARP和翻转ARP】,这里会根据应用广泛性选择3个类型ARP进行试验。下面是ARP协议封装格式参考图。

一、ARP协议

ARP全称为Address  Resolution  Protocol地址解析协议,用来实现IP地址到MAC地址的映射。ARP拥有5中不同类型的分类【ARP、代理ARP、逆向ARP、免费ARP和翻转ARP】,这里会根据应用广泛性选择3个类型ARP进行试验。下面是ARP协议封装格式参考图。

ARP协议

在局域网中实现通信,需要源目IP地址和MAC地址后才能实现一个完整的数据封装过程,但是第一次通信往往不知道目标MAC地址,这时候就需要ARP协议来获取目标主机的MAC地址,如下图。

ARP协议实验拓扑

二、实验

首先搭建实验环境,和上节课一样,我们通过两个路由器来搭建一个通信环境,通过Wireshark抓取数据包进行分析。

路由配置和上节课一样,这里就不重复配置了,配置好路由之后通过命令:show arp来查看路由内的地址映射表:

R1# show arp
Protocol  Address          Age (min)      Hardware Addr   Type   Interface
Internet  10.1.1.1                -         cc01.1f60.0000     ARPA   FastEthernet0/0

从这里可以看出来,R1的路由表中只有自己的IP地址和MAC地址,这是因为我们没有发送ARP请求广播,当我们对R2进行ping 的时候,再看一下路由表就会发现以下内容:

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 80 percent (4/5), round-trip min/avg/max = 12/21/32 ms

R1#show arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   cc01.1f60.0000  ARPA   FastEthernet0/0
Internet  10.1.1.2              242   cc02.0e40.0000  ARPA   FastEthernet0/0

与此同时在R2中也会建立R1的地址表:

R2#show arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                0   cc01.1f60.0000  ARPA   FastEthernet0/0
Internet  10.1.1.2                -   cc02.0e40.0000  ARPA   FastEthernet0/0

这里就会看到两个路由器的IP地址和MAC地址了。这是因为我们通过ARP向R2发送了一个请求,R2把MAC地址发送回来在R1的地址表中建立数据。这样就能为后面的通信封装完整的数据包了。

ARP请求

从上图可以看出来,ping的时候首先发送一个广播包出去,请求类型的ARP,这时候不知道MAC地址,然后回复包如下图:

ARP回复包

这样就完成了一个完整的ARP请求和回复。

三、代理ARP

代理ARP(Proxy ARP):就是一台局域网设备发送跨网段请求的时候,出口路由或网关设备将自己的MAC地址回复给请求主机,这个过程就叫代理ARP,如下图。

代理ARP

根据上面的原理图首先配置好设备地址,其次就是要关闭PC1和PC2的路由功能,因为代理ARP只有两种情况会触发:1.没有路由功能的主机;2.有路由功能,但是目的地指向本机出口,这里先模拟没有路由功能的电脑。

配置设备命令:

PC1配置:
PC1#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
PC1(config)#interface f0/0
PC1(config-if)#ip address 10.1.1.1 255.255.255.0
PC1(config-if)#no shutdown
*Mar  1 00:01:29.563: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar  1 00:01:30.563: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
PC1(config-if)#end
PC1#write memory
Building configuration...
[OK]

R1配置:
R1#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#interface f0/0
R1(config-if)#ip address 10.1.1.2 255.255.255.0
R1(config-if)#no shutdown
*Mar  1 00:03:25.299: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
*Mar  1 00:03:26.299: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
R1(config-if)#end
R1#
*Mar  1 00:03:28.003: %SYS-5-CONFIG_I: Configured from console by console
R1#write memory
Building configuration...
[OK]

R1#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
R1(config)#interface f0/1
R1(config-if)#ip address 10.1.2.1 255.255.255.0
R1(config-if)#no shutdown
R1(config-if)#
*Mar  1 00:05:18.455: %LINK-3-UPDOWN: Interface FastEthernet0/1, changed state to up
*Mar  1 00:05:19.455: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up
R1(config-if)#end
R1#
*Mar  1 00:05:25.819: %SYS-5-CONFIG_I: Configured from console by console
R1#write memory
Building configuration...
[OK]

PC2配置:
PC2#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
PC2(config)#interface f0/0
PC2(config-if)#ip address 10.1.2.2 255.255.255.0
PC2(config-if)#no shutdown
PC2(config-if)#end
PC2#
*Mar  1 00:05:17.591: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up
PC2#w
*Mar  1 00:05:18.243: %SYS-5-CONFIG_I: Configured from console by console
*Mar  1 00:05:18.591: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/0, changed state to up
PC2#write memory
Building configuration...
[OK]

 通过上面配置,现在PC1到R1的0/0接口是相通的,R1的0/1接口到PC2也是相通的,可以直接用ping来测试。
现在我们通过show ip route可以看到以下结果

     10.0.0.0/24 is subnetted, 1 subnets
C       10.1.1.0 is directly connected, FastEthernet0/0

说明PC1现在还是一个路由器,要想模拟没有路由功能的终端设备触发代理ARP就需要关闭路由功能,关闭命令:PC2(config)#no ip routing。通过命令:R1#show ip interface f0/0可以看到R1的代理ARP功能是开启的:Proxy ARP is enabled,这里要注意的是PC2的路由功能关闭之后就不能反回应答数据包了,所以暂时保留。这时候我们的整个实验环境就已经完善了,下面就来使用Wireshark抓包了解代理ARP是什么样的。

同时在两条线路上抓包,如图:

ARP实验拓扑

PC1#ping 10.1.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.2.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 40/321/1128 ms

来看看抓取的数据包:

arp

从上图可以看出来,ARP请求10.1.2.2的MAC地址得到的回复包里面的MAC地址其实是R1  f0/0的MAC地址,这也就验证了我们代理ARP的原理。

从另一张图我们可以看出来PC2的真实MAC地址:

MAC地址

还有一种情况就是当PC1有路由功能的时候,但是出接口指向自己,这种情况我们来配置一下。

1.先打开PC的路由功能

PC1#configure terminal
Enter configuration commands, one per line.  End with CNTL/Z.
PC1(config)#ip routing

2.配置一条静态路由

PC1(config)#ip route  10.1.2.0  255.255.255.0  f0/0      //这种写法使用代理ARP,因为出接口指向自己才能出发代理ARP

PC1(config)#ip route  10.1.2.0  255.255.255.0  10.1.2.1      //这种写法只能用到普通ARP

这时候可以看到一条静态路由指向10.1.2.0网段。

PC1(config)#ip route 10.1.2.0 255.255.255.0 f0/0
PC1(config)#end
*Mar  1 01:29:13.079: %SYS-5-CONFIG_I: Configured from console by console
PC1#show ip route
Codes: C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route
Gateway of last resort is not set
     10.0.0.0/24 is subnetted, 2 subnets
S       10.1.2.0 is directly connected, FastEthernet0/0
C       10.1.1.0 is directly connected, FastEthernet0/0

 这时候再来ping并且抓包。

PC1#ping 10.1.2.2
Type escape sequence to abort.
Sending 5, 100-byte ICMP Echos to 10.1.2.2, timeout is 2 seconds:
.!!!!
Success rate is 80 percent (4/5), round-trip min/avg/max = 20/35/48 ms

arp数据包

从抓包结果可以看到,获得的MAC地址还是R1的,并不是PC2的,这就是代理ARP。

如果使用PC1(config)#ip route  10.1.2.0  255.255.255.0  10.1.2.1写法,先关闭上面的静态路由:

(config)#no  ip route  10.1.2.0  255.255.255.0  f0/0
PC1#show arp
Protocol  Address          Age (min)  Hardware Addr   Type   Interface
Internet  10.1.1.1                -   cc01.17f4.0000  ARPA   FastEthernet0/0

可以看出来,这里就不是一个跨网段请求了。

鲨鱼博客版权说明:本站文章以原创为主,部分来自网络,请转载时保留原文链接!
# 相关文章
回顶部