ARP理论基础
- IP 地址(网络层)是“逻辑拓扑地址”:它基于层次化编码(网络号+主机号),屏蔽了底层异构网络的物理差异(不管是以太网、Wi-Fi 还是令牌环网)。IP 路由表的核心逻辑是路径规划,即通过路由算法决定数据包如何跨越自治系统(AS)到达目标子网。
- MAC 地址(数据链路层)是“平面物理地址”:它由 IEEE 组织分配,固化在网卡 ROM 中,全球唯一,但不具备拓扑结构。在同一个局域网(VLAN/广播域)内,数据帧(Frame)的物理传输只认 MAC 地址,不认 IP 地址。
ARP(Address Resolution Protocol,RFC 826)正是工作在网络层底部、数据链路层之上的动态映射协议。
1、 报文封装与 BUM 流量发送
当主机 A 尝试获取同网段主机 B 的 MAC 地址时,由于不知道目的 MAC,数据链路层会将以太网帧的目标 MAC 填充为全 FF-FF-FF-FF-FF-FF。 这属于 BUM 流量(Broadcast 广播),交换机(Switch)收到该帧后,会对其进行泛洪(Flooding)处理,转发至该 VLAN 内的所有物理端口。
2、ARP 报文结构分析
标准的 ARP 报文(不包含以太网首部)长度为 28 字节,包含以下核心字段:
- Hardware Type(硬件类型):以太网通常为
0x0001。 - Protocol Type(协议类型):映射的高层协议,IPv4 为
0x0800。 - Opcode(操作码):
1表示 ARP Request(广播),2表示 ARP Reply(单播)。 - Sender/Target Hardware/Protocol Address:源/目的 MAC 地址与 IP 地址。在 Request 报文中,
Target Hardware Address被填充为全0。
3、ARP 缓存表(ARP Cache)与超时机制
为防止高频广播导致的“广播风暴(Broadcast Storm)”,每台主机都在内核态维护一个动态的 ARP 缓存表。
- 老化时间(Dynamic Aging Time):Windows 通常为 2-20 分钟,Linux 默认约 60 秒。到期后若无通信,条目自动擦除,以应对局域网内设备 IP 变更、网卡更换或漂移(如虚拟机迁移)。
- 静态条目(Static ARP):由管理员手动绑定,永久有效,通常用于防御 ARP 欺骗攻击(ARP Spoofing)。
打开 Windows 的 CMD(或者 macOS/Linux 终端),输入:
arp -a
一、网络连通性测试
我们需要两台win10虚拟机,在同一个局域网,同一网关下面。
我们之前已经安装好了攻击机,还有靶机,并且在攻击机上面配置了arp攻击的基本环境和工具。现在我们开始实验。
在实验开始之前,我们要确保靶机和攻击机在同一个网段下面,使用同一个网关,并且都可以访问互联网。
我们这里使用管理员权限启动两台win10的cmd窗口:
再次确认两天win10,IP地址,网关配置正确,并且可以相互ping通。
ipconfig /all
攻击者 ping 靶机IP地址,确认可以ping通。
靶机 ping 攻击者IP地址,也确认可以ping通。
至此,我们确认两台设备均在同一个局域网下面,并且可以访问互联网,正式开始攻击者arp欺骗靶机实验。
二、arp欺骗(单向欺骗)
1、软件配置启动
在 NetFuke_1.07 文件夹当中,找到NetFuke软件,双击启动软件。
界面如下:
2、单向 arp 欺骗理论基础
1.NetFuke 的单向 ARP 欺骗,采用 S→M→D(Source → Middle → Destination) 模型:
| 角色 | 含义 | 欺骗中的作用 |
|---|---|---|
| S(Source) | 被冒充的 IP 地址 | 你要伪造 ARP 响应包中,声明 “MAC 是中间人” 的 IP |
| D(Destination) | 被欺骗的目标设备 IP | 接收伪造 ARP 响应包的设备,ARP 缓存会被篡改 |
| M(Middle / 中间人) | 你的攻击机 IP/MAC | 伪造的 MAC 地址,也就是你要让 D 认为 “S 的 MAC 就是 M” |
2.ARP_Response模式:工具会向目标 IP(D)发送伪造的 ARP 响应包,报文格式固定为:
ARP Response: [S的IP] is at [M的MAC]
- 报文含义:向 D 声明 “IP 地址
S对应的 MAC 地址,是中间人M的 MAC” - 触发效果:D 收到这个响应包后,会无条件更新自己的 ARP 缓存,把
S的IP→MAC映射改成M的MAC - 流量劫持:D 后续所有发往 S 的数据包,二层都会转发给中间人 M,从而被你拦截
3.两种场景,一种是劫持靶机到网关的流量,攻击者需要欺骗靶机,第二种是截止网关到靶机的下行流量,攻击者需要欺骗网关。
| 场景目标 | 欺骗对象 | S(冒充 IP) | D(被欺骗设备) | 流量效果 |
|---|---|---|---|---|
| 劫持上行流量(靶机→网关) | 欺骗靶机,让它认为网关的 MAC 是攻击机 MAC | 网关 IP | 靶机 IP | 靶机发往网关的上行流量,全部发给攻击机 |
| 劫持下行流量(网关→靶机) | 欺骗网关,让它认为靶机的 MAC 是攻击机 MAC | 靶机 IP | 网关 IP | 网关发往靶机的下行流量,全部发给攻击机 |
| 4.来源IP、中间人IP,目标IP定义 |
- 来源 IP = S
- 中间人 IP = M(攻击机自身 IP)
- 目标 IP = D
3、单向ARP实验–劫持上行流量操作
开始之前,我们需要记录,靶机、攻击者、网关的IP和对应的mac,在本实验当中:
| 角色 | IP 地址 | 真实 MAC 地址 | 角色定位 |
|---|---|---|---|
| 攻击者(攻击机) | 192.168.150.10 |
00:0C:29:D4:81:8C |
NetFuke 中间人设备,ARP 欺骗发起方 |
| 靶机(被攻击者) | 192.168.150.12 |
00:0C:29:AE:C7:53 |
被欺骗的 Windows 主机,业务流量发起方 |
| 网关(默认网关) | 192.168.150.2 |
局域网出口,真实网络网关 |
因为我们需要劫持从靶机→网关的上行流量,因此靶机是上行流量的发送者即来源IP,中间人IP固定是攻击者IP,目标IP就是网关的IP,在本实验当中配置如下:
- 来源IP=网关IP :
192.168.150.12 - 中间人IP=攻击者IP:
192.168.150.10 - 目标IP = 靶机IP:
192.168.150.2
A、嗅探配置
1.选择正确的网卡(本机 IP:192.168.150.10)
配置内容
选中了对应攻击机 IP 192.168.150.10 的物理网卡
- 网卡是 NetFuke 收发数据包的物理载体,必须选择和靶机、网关在同一个局域网的网卡,否则:
- 伪造的 ARP 欺骗包无法单播 / 广播到靶机;
- 靶机被劫持后发往网关的流量,也无法发送到攻击机。
- 之前的实验中,攻击机 IP 是
192.168.150.10,和靶机192.168.150.12、网关192.168.150.2同网段,只有选这个网卡,才能保证三层连通、二层广播可达。
2.勾选「启用 ARP 欺骗」选项
开启 NetFuke 的 ARP 欺骗总开关。
- 这是 ARP 欺骗的功能总开关,只有勾选后,NetFuke 才会按照你后续配置的「冒充网关、欺骗靶机」规则,发送伪造的
ARP Response响应包; - 不勾选的话,工具只会做普通的网络嗅探,不会发送任何伪造 ARP 包,靶机的 ARP 缓存永远不会被篡改,欺骗和断网都无从谈起。
3.勾选「启用混杂模式监听」
开启网卡的混杂模式。
4.勾选「关闭转发」(断网实验的核心配置)
选择「关闭转发」,而非「主动转发」
| 模式 | 效果 | 适用场景 |
|---|---|---|
| 主动 / 路由转发 | 攻击机收到靶机的流量后,会转发给真实网关 | 中间人攻击(透明劫持,靶机不知道被欺骗,能正常上网) |
| 关闭转发 | 攻击机收到靶机的流量后,直接丢弃,不转发给网关 | 断网实验(流量被拦截,靶机无法访问外网) |
| 配置方式如图所示: |
B、ARP欺骗设置
配置方式如图所示,我们需要配置欺骗方式、IP地址、欺骗模式,为了劫持上行流量,也就是从靶机发送到网关的流量,此时靶机IP就是来源IP,这里填写 192.168.150.12 ,中间人IP默认是攻击者IP,填写192.168.150.10,目标IP就是网关IP,填写 192.168.150.2。
ARP_Request:发送 ARP 请求包,只能做存活探测,无法篡改 ARP 缓存;ARP_Response:发送伪造的 ARP 响应包,这才是 ARP 欺骗的核心模式。
配置完成之后,点击启动按钮,开始arp欺骗:
C、wireshark抓包
在攻击者win10,打开wireshark,选择对应网卡,开始抓包:
通过wireshark指令,对数据报文进行筛选,规则如下:
此指令翻译:筛选出arp包,并且目标是IP地址为192.168.150.12(即靶机)的报文。
arp && (arp.dst.proto_ipv4 == 192.168.150.12) # 替换为你自己的靶机IP
D 、靶机断网(实验效果展示)
被arp攻击之前
在靶机cmd窗口,查看arp映射表:
arp -a
可以发现,靶机在被arp攻击之前,映射表存储的IP和mac映射是正确的,如图所示:
靶机可以访问网页,正常上网
被arp攻击之后
被arp攻击之后,可以发现,靶机的arp映射表当中,网关IP对应的
无法访问网页
4、单向arp实验–劫持下行流量操作
开始之前,我们需要记录,靶机、攻击者、网关的IP和对应的mac,在本实验当中:
| 角色 | IP 地址 | 真实 MAC 地址 | 角色定位 |
|---|---|---|---|
| 攻击者(攻击机) | 192.168.150.10 |
00:0C:29:D4:81:8C |
NetFuke 中间人设备,ARP 欺骗发起方 |
| 靶机(被攻击者) | 192.168.150.12 |
00:0C:29:AE:C7:53 |
被欺骗的 Windows 主机,业务流量发起方 |
| 网关(默认网关) | 192.168.150.2 |
局域网出口,真实网络网关 |
因为我们需要劫持从网关→靶机的下行流量,因此网关是下行流量的发送者即来源IP,中间人IP固定是攻击者IP,目标IP就是靶机的IP,在本实验当中配置如下:
- 来源IP=网关IP :
192.168.150.2 - 中间人IP=攻击者IP:
192.168.150.10 - 目标IP = 靶机IP:
192.168.150.12
A、嗅探配置
完全参考上行流量arp实验的嗅探配置[[#A、嗅探配置]]
B、ARP欺骗设置
配置方式如图所示,我们需要配置欺骗方式、IP地址、欺骗模式,为了劫持下行流量,也就是从网关发送到靶机的流量,此时网关IP就是来源IP,这里填写 192.168.150.2 ,中间人IP默认是攻击者IP,填写192.168.150.10,目标IP就是网关IP,填写 192.168.150.12。
ARP_Request:发送 ARP 请求包,只能做存活探测,无法篡改 ARP 缓存;ARP_Response:发送伪造的 ARP 响应包,这才是 ARP 欺骗的核心模式。
这里为了欺骗网关,欺骗模式依然选择ARP_Response模式。
配置完成之后,点击启动按钮,开始arp欺骗:
C、wireshark抓包
在攻击者win10,打开wireshark,选择对应网卡,开始抓包:
通过wireshark指令,对数据报文进行筛选,规则如下:
此指令翻译:筛选出arp包,并且目标是IP地址为192.168.150.2(即网关)的报文。
arp && (arp.dst.proto_ipv4 == 192.168.150.2) # 替换为自己的网关IP
D 、靶机断网(实验效果展示)
被arp攻击之前
在靶机cmd窗口,查看arp映射表:
arp -a
可以发现,靶机在被arp攻击之前,映射表存储的IP和mac映射是正确的,如图所示:
而且网页可以正常访问:
被arp攻击之后
可以发现,靶机的arp映射表在被攻击之前,和在被攻击之后,是完全一样的,这是为什么?
答案:是因为下行流量的欺骗,是欺骗了网关的arp映射,网关错误的把攻击者当做是目标主机,从而把本来要发送给靶机的流量发送给了攻击者,从而实现了靶机的断网。因此靶机的arp表没有任何变化。
再次刷新浏览器网页,发现已经无法正常访问互联网:
可能遇到的问题
A、Netfuke运行启动报错:Error ARP欺骗设置
ARP 欺骗是二层网络攻击,只能在 同一个广播域(同一局域网、同一 IP 网段)内生效,配置里三个 IP 完全不在一个网段,则会报错,如图所示:
解决:
- 中间人IP有问题,需要检查网卡是否选择正确
- 若网卡选择正确,则重新填写中间人IP,中间人IP就是攻击者电脑的静态IP。
三、arp欺骗(双向欺骗)
1、软件配置启动
参考arp单向欺骗启动方式 [[#1、软件配置启动]]
2、双向 arp 欺骗理论基础
1.NetFuke 的双向 ARP 欺骗,采用 S↔M↔D(Source ↔ Middle ↔ Destination) 模型:
| 角色 | 含义 | 欺骗中的作用 |
|---|---|---|
| S(Source) | 网关 IP(或主机 AIP) | 被冒充的 IP 地址之一,伪造 ARP 响应包中声明 “MAC 是中间人” 的 IP |
| D(Destination) | 靶机 IP(或主机 BIP) | 被冒充的 IP 地址之二,伪造 ARP 响应包中声明 “MAC 是中间人” 的 IP |
| M(Middle / 中间人) | 你的攻击机 IP/MAC | 伪造的 MAC 地址,双向发送伪造响应包,让 S 和 D 互相认为对方的 MAC 就是 M |
| 2.ARP_Response 模式:工具会同时向目标 IP(D)和来源 IP(S)发送两组伪造的 ARP 响应包,报文格式为: |
// 向D发送:声明S的MAC是M ARP Response: [S的IP] is at [M的MAC]
// 向S发送:声明D的MAC是M ARP Response: [D的IP] is at [M的MAC]
- 报文含义:同时向 D 声明 “IP 地址
S对应的 MAC 是中间人M”,向 S 声明 “IP 地址D对应的 MAC 是中间人M” - 触发效果:S 和 D 收到伪造响应包后,都会无条件更新自身 ARP 缓存,将
S↔D的 IP-MAC 映射都修改为S→M、D→M - 流量劫持:D 发往 S 的上行流量、S 发往 D 的下行流量,二层都会转发给中间人 M,实现双向全流量劫持
3.双向欺骗的核心目标:同时劫持上行(靶机→网关)和下行(网关→靶机)流量,完整实现中间人攻击,两种方向的欺骗会同时生效:
| 场景目标 | 欺骗对象 | S(冒充 IP) | D(被欺骗设备) | 流量效果 |
|---|---|---|---|---|
| 双向全流量劫持(靶机↔网关) | 同时欺骗靶机 + 网关,让两者互相认为对方的 MAC 是攻击机 MAC | 网关 IP | 靶机 IP | 靶机发往网关的上行、网关发往靶机的下行流量,全部经过攻击机 |
| 注:双向欺骗本质是同时执行了 “欺骗靶机” 和 “欺骗网关” 两个单向欺骗过程,因此 S 和 D 是对称的,工具会自动双向发送伪造包,无需额外配置反向参数。 |
4.来源 IP、中间人 IP,目标 IP 定义
- 来源 IP = S(网关 IP)
- 目标 IP = D(靶机 IP)
- 中间人 IP = M(攻击机自身 IP)
双向欺骗模式下,工具会自动以对称方式处理:既向 D 发送 “S的IP→M的MAC” 的伪造包,也向 S 发送 “D的IP→M的MAC” 的伪造包,无需额外配置反向参数。
3、双向ARP实验
记录下,靶机、攻击者、网关的IP和对应的mac
| 角色 | IP 地址 | 真实 MAC 地址 | 角色定位 |
|---|---|---|---|
| 攻击者(攻击机) | 192.168.150.10 |
00:0C:29:D4:81:8C |
NetFuke 中间人设备,ARP 欺骗发起方 |
| 靶机(被攻击者) | 192.168.150.12 |
00:0C:29:AE:C7:53 |
被欺骗的 Windows 主机,业务流量发起方 |
| 网关(默认网关) | 192.168.150.2 |
局域网出口,真实网络网关 |
A、嗅探配置
嗅探配置把关闭转发 修改为 主动转发,其他设置保持不变,从而让攻击者可以作为中间人,同时转发上行流量和下行流量。
B、ARP欺骗设置
因为双向欺骗是上下行流量全部欺骗,因此网关和靶机都被欺骗,两者地位一致。因此来源IP和目标IP 两者,分别填写靶机IP和网关IP,且可以交换顺序。
保存配置之后,启动arp欺骗。
C、wireshark抓包
使用如下筛选条件,找到所有的arp包:
arp
请自行分析各个数据包的含义,写入实验报告当中。
当然也可以追踪靶机的http,tcp流量,筛选指令如下(仅供参考):
ip.addr == 192.168.150.12 && http # IP 替换为你自己靶机的IP
D、靶机arp表变化
arp -a
因为攻击者开启了主动转发,因此靶机依然可以上网,只不过流量从攻击者这里绕了一圈。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 kipleyarch@gmail.com