Linux --ARP的具体过程与ARP欺骗

在日常网络通信中,我们常常听到"IP地址"和"MAC地址"。IP地址负责在复杂的网络世界中寻找方向(逻辑地址),而MAC地址则是设备在局域网内真正的"身份证"(物理地址)。

那么,当我们知道对方的IP,却不知道对方的MAC时,该怎么办?这就轮到今天的主角------**ARP(地址解析协议)**出场了。

本文将从ARP的报文结构讲起,一步步拆解ARP的工作过程,最后揭秘网络安全中经典的"ARP欺骗"攻击。

ARP报文长什么样?

要理解ARP怎么工作,先得看看它的"身份证"。ARP报文是直接封装在以太网帧里发送的。

一个完整的以太网帧(包含ARP请求/应答)结构如下:

字段名称 长度(字节) 作用说明
以太网目的地址 6 接收方的MAC地址。如果是广播,则为 FF:FF:FF:FF:FF:FF
以太网源地址 6 发送方的MAC地址
帧类型 2 标识上层协议,ARP请求/应答为 0x0806(图中未明确标出,但隐含)
硬件类型 2 指链路层网络类型。1 表示以太网
协议类型 2 指要转换的地址类型。0x0800 表示IP地址
硬件地址长度 1 对于以太网MAC地址,长度为 6 字节
协议地址长度 1 对于IP地址,长度为 4 字节
op (操作码) 2 1 表示ARP请求,2 表示ARP应答
发送端以太网地址 6 发送方的MAC地址
发送端IP地址 4 发送方的IP地址
目的以太网地址 6 接收方的MAC地址(请求时通常填全0,因为还不知道)
目的IP地址 4 接收方的IP地址

重点提示 :注意到源MAC地址、目的MAC地址在以太网首部和ARP请求中各出现了一次。对于以太网来说,这确实是多余的;但如果底层不是以太网(比如其他类型的链路层网络),这种冗余设计就可能是必要的。

ARP的具体工作过程

网络拓扑:主机A、主机B、主机C、主机D、主机E通过交换机连接在同一个局域网内,而路由器R(网关)连接着外部网络。

现在,主机A需要发送数据给外部网络,它知道路由器的IP(ipR),但不知道路由器的MAC。接下来,一场生动的ARP寻址战开始了。

步骤一:发起ARP请求(大声呼喊)

  • 背景:主机A(IP: ipA, MAC: macA)想要把数据包发给路由器R(IP: ipR, MAC: macR)。主机A虽然知道ipR,但缓存表(ARP Cache)里没有对应的macR。

  • 动作 :主机A只能向局域网内广播发送一个ARP请求。

  • 报文内容 :这个请求的以太网目的地址是 FF:FF:FF:FF:FF:FF(所有人都能收到),ARP请求中写着:"我是ipA,我的MAC是macA,谁的IP是ipR?请把你的MAC地址告诉我!"

  • 思考:此时,局域网内的B、C、D、E、以及路由器R都收到了这个广播。但它们一看目的IP不是自己,就会默默丢弃这个包。

步骤二:ARP应答(双向奔赴,但暗藏危机)

  • 动作 :路由器R收到广播后,发现:"原来找的是我!"于是,路由器R不再广播,而是单播回复主机A。

  • 报文内容 :以太网目的地址填macA,ARP应答中写着:"我是ipR,我的MAC地址是macR。"

  • 缓存更新:

    • 主机A收到应答后,立刻将 ipR <-> macR 存入自己的ARP缓存表中。

    • 路由器R也"顺便"把主机A的 ipA <-> macA 存入了自己的缓存中。(因为它在请求包中提取到了A的信息)。

危机出现 :出现了一个神秘的黑客设备"主机M(mac addr: macM)"。在真实的网络环境中,M不仅是旁观者,它还可以伪装成上述过程的一部分。为了防止被踢下线,M开始不停地向网络中发送伪造的ARP应答("大量发送"),这就是我们后面要讲的ARP欺骗。

步骤三:致命伪装(ARP欺骗的诞生)

  • 动作 :主机M(黑客)开始分别向主机A和路由器R发送伪造的ARP应答(注意:ARP协议是无状态的,即使没有发起请求,设备也会接收应答)。

  • 对主机A的欺骗 :M对A说:"我是ipR(路由器),我的MAC地址是macM。"

    • 结果:主机A信以为真,更新了ARP缓存,将去往外部网络的数据全部发给了M。
  • 对路由器R的欺骗 :M对R说:"我是ipA(主机A),我的MAC地址是macM。"

    • 结果:路由器R也信以为真,更新了ARP缓存,将返回给主机A的数据全部发给了M。
  • 最终结果(成为中间人) :主机A和路由器R的流量现在全部流向了主机M。M可以查看、篡改甚至丢弃这些数据,或者只是把它们转发给对方以维持不断网,这就是经典的 ARP中间人攻击(MITM)。

为什么ARP这么容易被欺骗?

看完上述过程,你可能会问:为什么主机A和路由器R会轻易相信黑客M的话?

这源于ARP协议设计的三个"先天缺陷":

  1. 无状态:ARP协议不需要建立连接。设备收到一个ARP应答包,哪怕自己从来没发过请求,也会默认这是真的,并直接更新缓存。

  2. 无认证机制:ARP报文里没有密码,也没有数字签名。只要有人声称"我是XX IP",网络设备就无法验证真伪。

  3. 后发制人:ARP缓存的更新机制是"后来者居上"。即使主机A之前已经知道了路由器的真实MAC,只要黑客M紧接着发一个伪造的ARP应答,主机A就会立刻把假MAC覆盖掉真MAC。

如何防范ARP欺骗?

在现实的企业网络和个人网络中,我们可以采取以下措施:

  1. 静态ARP绑定:在关键设备(如服务器、网关)上,手动将IP和MAC地址绑定(写死在ARP表里),不接收动态更新。

  2. ARP防火墙:在个人电脑上安装安全软件(如360、火绒等),开启局域网防护。它们会监控网络中的ARP应答,拦截异常的欺骗包。

  3. 交换机端口安全 :在企业级交换机上配置端口安全策略,限制每个端口只能学习到特定数量的MAC地址,或者在接入层交换机上配置 DAI(动态ARP检测) 功能,拦截非法的ARP报文。

相关推荐
雪落漂泊2 小时前
Linux进程(五):进程地址空间篇
linux·运维·服务器
QXWZ_IA2 小时前
定位数据怎么推给 IoT 平台?消息协议选型与接入准备
网络·人工智能·物联网·安全
AR-26710-2 小时前
Linux Day32——网络,ROCE-IB与以太网
linux·运维
wdeok3 小时前
Socket编程Tcp
服务器·网络·tcp
千舟软件4 小时前
报修系统对接企业微信和钉钉的3种方式_千舟报修云
服务器·钉钉·企业微信
LongRunning17 小时前
【Linux】RK3568-OpenCV+YOLO(八)
linux·opencv·yolo
迪康coolmu19 小时前
出差终端数据安全落地实战:基于迪康端点安全一体化管理系统的四道防线实践
运维·服务器·经验分享·笔记·其他·安全·php
xiaoye-duck19 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
民乐团扒谱机20 小时前
【微实验】NSGA-II(非支配排序遗传算法)——解决多目标优化问题的“自然选择模拟器”
linux·人工智能·算法
물の韜21 小时前
ZYNQ/FMQL系列Linux之I2C开发实战
linux·arm开发·嵌入式硬件·设备树·iic·zynq