news 2026/4/20 9:25:35

Wireshark抓取ARP包并进行分析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Wireshark抓取ARP包并进行分析

ARP到底属于IP层还是链路层,属于局域网吗?

这是一个非常深刻的问题,能问到这个层面,说明你对网络分层的思考已经超越了多数人。

直接给出结论:ARP 在概念上属于链路层(OSPF 中的 L2),但在实现上它“寄生”在 IP 层之上。它严格只在局域网内工作,从不跨路由器。

下面我把这三点拆开,详细解释清楚。

1. ARP 属于哪一层?(经典争议点)

这个问题在教材和工程界有不同说法,但主流共识是:

  • OSI 七层模型:归类为【数据链路层(L2)】。因为它直接封装在以太网帧里(类型字段0x0806),负责解析同一链路上的 MAC 地址。

  • TCP/IP 四层模型:介于【网络层(L3)和链路层(L2)之间】。因为它服务于 IP 协议(给 IP 找 MAC),但又依赖链路层广播。

最准确的理解:

ARP 是一个“跨层协议”,功能上属于 L2,逻辑上为 L3 服务。

用个比喻:

  • IP 层:你想给北京的朋友写信,你写的是“北京市朝阳区XX路XX号”(IP地址)。

  • ARP:你把这个地址输入地图,地图告诉你“哦,这个地址的具体门牌号和快递员编号是 XXX”(MAC地址)。

  • 链路层:快递员(MAC)拿着这封信去送。

ARP 就是那个“地图查询服务”——它服务于 IP 层(L3),但查出来的结果是给链路层(L2)用的,查询过程本身使用链路层的广播机制。

2. ARP 属于局域网吗?

是的,严格属于局域网,并且只在同一广播域内有效。

  • ARP 请求是广播帧:目的 MAC =FF:FF:FF:FF:FF:FF,这个帧永远不会被路由器转发。路由器收到这种广播包会直接丢弃(除非配置了代理 ARP,但那是特例)。

  • ARP 应答是单播帧:虽然应答是单播,但它是针对刚才那个广播请求的回应,范围仍然限定在同一个广播域内。

这意味着:

  • 主机 A(192.168.1.2)想和主机 B(192.168.1.3)通信 →会发 ARP(同网段)。

  • 主机 A(192.168.1.2)想和百度(110.242.68.66)通信 →不会对百度发 ARP!它会发 ARP 查询默认网关192.168.1.1)的 MAC,然后把包交给网关。

3. 为什么很多人误以为 ARP 是“IP 层的”?

因为 ARP 处理的对象是IP 地址,而且你经常用arp -a命令看到的输出是IP地址 <-> MAC地址的映射表。

关键区别:

  • ARP 的输入:一个 IP 地址(属于 L3 的概念)。

  • ARP 的输出:一个 MAC 地址(属于 L2 的概念)。

  • ARP 的传输:使用 L2 的广播(不会经过 L3 路由)。

打个比方:你用计算器算一道数学题。输入是数字(IP地址),输出也是数字(MAC地址),但计算器本身不是数学,它是一个工具。ARP 就是这个“工具”,它输入 L3 的地址,输出 L2 的地址,但它的工作方式完全在 L2 的范围内。

4. 一张图总结 ARP 的位置

+------------------+ | 应用层(HTTP等) | +------------------+ | 传输层(TCP/UDP)| +------------------+ | 网络层(IP) | <--- 要发数据给 192.168.1.3 +------------------+ | ARP(寄生层) | <--- 问:"谁是 192.168.1.3?请告诉我你的 MAC" +------------------+ | 链路层(以太网) | <--- 广播发送 ARP 请求(FF:FF:FF:FF:FF:FF) +------------------+

特殊说明:代理 ARP(Proxy ARP)

有一种技术叫“代理 ARP”,可以让路由器假装自己是目标设备,替其他网段的设备回应 ARP 请求。这打破了“ARP 只在局域网”的规则,但:

  • 现代网络基本不用,因为它有安全风险且效率低。

  • 家用路由器默认不开启

  • 即使开启,也只是让 ARP“跨越”了路由器,但本质上还是把一个远程设备映射成“本地”的,属于例外情况。

一句话答案

ARP 在功能上是链路层的,在逻辑上服务于 IP 层,并且严格只在同一个局域网(广播域)内工作,从不跨路由器。

ARP(地址解析协议)详解

ARP(Address Resolution Protocol)是TCP/IP协议栈中一个看似简单但极其关键的协议。下面从原理、工作流程、报文格式、安全问题等角度全面解析。

一、ARP的核心问题:为什么要ARP?

问题的本质

在网络通信中存在"身份鸿沟":

  • IP地址:逻辑地址,由管理员或DHCP分配,可以随时更改(如192.168.1.2)

  • MAC地址:物理地址,出厂时烧录在网卡上,全球唯一且不可更改

矛盾点:主机A要发送数据给主机B,A知道B的IP地址,但以太网帧传输时必须填写目的MAC地址。

ARP的作用:在同一个局域网内,根据IP地址找到对应的MAC地址。

┌─────────────────────────────────────────┐ │ IP数据包(源IP: A, 目的IP: B) │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ ARP问:谁知道 192.168.1.3 的MAC地址? │ └─────────────────────────────────────────┘ ↓ ┌─────────────────────────────────────────┐ │ 以太网帧(源MAC: A, 目的MAC: B的MAC) │ └─────────────────────────────────────────┘

二、ARP工作原理(4步曲)

完整流程示例

假设:

  • 主机A:IP=192.168.1.2,MAC=AA:AA:AA:AA:AA:AA

  • 主机B:IP=192.168.1.3,MAC=BB:BB:BB:BB:BB:BB

  • 两者在同一交换机下,A首次与B通信

步骤1:检查ARP缓存

A先查看自己的ARP缓存表(arp -a):

C:\> arp -a 接口: 192.168.1.2 --- 0x3 互联网地址 物理地址 类型 192.168.1.1 CC:CC:CC:CC:CC:CC 动态

发现没有B的记录,进入步骤2。

步骤2:发送ARP请求(广播)

A构造一个ARP请求报文:

  • 目的MAC地址 =FF:FF:FF:FF:FF:FF(广播地址)

  • 源MAC地址 =AA:AA:AA:AA:AA:AA

  • 请求内容:"谁是192.168.1.3?请告诉192.168.1.2"

这个广播帧会被交换机转发到同一广播域内的所有设备(包括B、路由器、其他电脑)。

步骤3:目标设备响应(单播)

B收到广播后发现问的是自己,于是:

  • 将A的IP和MAC记录到自己的ARP缓存

  • 发送ARP响应报文(单播):

    • 目的MAC =AA:AA:AA:AA:AA:AA(直接发给A)

    • 源MAC =BB:BB:BB:BB:BB:BB

    • 响应内容:"192.168.1.3的MAC是BB:BB:BB:BB:BB:BB"

步骤4:更新缓存并通信

A收到响应后:

  • 将B的映射记录到ARP缓存(通常保留2分钟)

  • 现在可以正确封装以太网帧,开始数据通信

时序图表示

主机A (192.168.1.2) 交换机 主机B (192.168.1.3) | | | |--- ARP请求(广播)------->|------> 广播到所有端口 ---| | "谁是192.168.1.3?" | | | | | | |<------ ARP响应(单播) --| |<--- ARP响应(单播) -------| "我是,MAC=BB:BB" | | "192.168.1.3是BB:BB" | | | | | |--- 正常数据帧 ---------->|------> 单播转发 ------->| | 目的MAC=BB:BB | |

三、ARP报文格式(以太网环境)

ARP报文直接封装在以太网帧中(类型字段0x0806),长度为28字节(不含填充)。

以太网头部(14字节) ┌──────────────┬──────────────┬──────────────┐ │ 目的MAC(6B) │ 源MAC(6B) │ 类型(2B) │ │ FF:FF:FF... │ AA:AA:AA... │ 0x0806(ARP) │ └──────────────┴──────────────┴──────────────┘ ARP报文(28字节) ┌─────────────┬─────────┬─────────────────┐ │ 硬件类型(2B)│ 协议(2B) │ 硬件地址长度(1B) │ │ 0x0001(以太)│ 0x0800IP│ 6(MAC长度) │ ├─────────────┴─────────┴─────────────────┤ │ 协议地址长度(1B) │ 操作码(2B) │ │ 4(IP长度) │ 1=请求, 2=响应 │ ├─────────────────────────────────────────┤ │ 源MAC地址(6B) │ ├─────────────────────────────────────────┤ │ 源IP地址(4B) │ ├─────────────────────────────────────────┤ │ 目的MAC地址(6B)(请求时为全0) │ ├─────────────────────────────────────────┤ │ 目的IP地址(4B) │ └─────────────────────────────────────────┘

关键字段说明

  • 硬件类型:以太网为1

  • 协议类型:IPv4为0x0800

  • 操作码:1=ARP请求,2=ARP响应,3=RARP请求...

  • 填充:ARP报文不足64字节时,需要填充到以太网最小帧长

四、ARP缓存表

Windows系统查看

C:\> arp -a 接口: 192.168.1.102 --- 0x14 互联网地址 物理地址 类型 192.168.1.1 2c-30-33-6a-8e-4c 动态 192.168.1.101 78-0c-b8-5e-4a-2a 动态 192.168.1.103 18-3f-47-9c-2b-15 动态 224.0.0.22 01-00-5e-00-00-16 静态 255.255.255.255 ff-ff-ff-ff-ff-ff 静态

缓存管理命令

操作系统查看缓存添加静态条目删除缓存
Windowsarp -aarp -s IP MACarp -d
Linuxarp -narp -s IP MACarp -d IP
macOSarp -aarp -s IP MACarp -d IP

缓存超时时间

  • 动态条目:通常120-300秒(不同系统不同)

  • 静态条目:永久存在,直到重启

  • 不完整条目:发送ARP请求后未收到响应,保留约3秒

五、ARP的高级特性

1. 免费ARP(Gratuitous ARP)

定义:主机主动发送ARP请求,询问自己的IP地址对应的MAC。

场景

  • IP地址冲突检测:DHCP客户端获取IP前,广播询问"谁是192.168.1.100?",如果有人响应说明IP已被占用。

  • MAC地址变更通知:网卡更换或虚拟IP切换时,主动广播"我是192.168.1.100,我的MAC现在是新地址",通知其他设备更新缓存。

报文特征

源IP = 目的IP = 自己的IP 目的MAC = FF:FF:FF:FF:FF:FF 操作码 = 1(请求)

2. 代理ARP(Proxy ARP)

原理:路由器替其他网段的设备响应ARP请求。

场景:主机A(192.168.1.2)想ping主机B(192.168.2.2),但A没有配置网关,以为B在同一网段。路由器收到A的ARP请求后,发现B在自己另一个接口,于是用自己的MAC响应。

缺点

  • 增加网络延迟

  • 可能导致路由环路

  • 有安全风险

  • 现代网络基本禁用

3. 反向ARP(RARP,Reverse ARP)

作用:根据MAC地址找IP地址。

历史意义:早期无盘工作站启动时,不知道自己的IP,通过RARP服务器获取。已被DHCP取代,现在基本废弃。

六、ARP与路由的关系

核心原则:ARP只在直连网段工作

主机A (192.168.1.2) ↓ 想要访问百度 (110.242.68.66) ↓ 判断:不在同一网段 ↓ 需要经过网关 (192.168.1.1) ↓ 对网关发ARP请求(不是对百度!) ↓ 得到网关MAC后,把数据包发给网关

实验验证

# 在主机A上抓包 tcpdump -i eth0 arp # 访问外网时,只能看到询问网关的ARP包 # 不会看到询问百度IP的ARP包

七、ARP的安全问题

1. ARP欺骗(ARP Spoofing)

原理:攻击者发送伪造的ARP响应,让受害者把攻击者的MAC映射到网关IP。

正常情况: 网关IP(192.168.1.1) -> 网关MAC(AA:AA:AA:AA:AA:AA) 攻击后: 网关IP(192.168.1.1) -> 攻击者MAC(BB:BB:BB:BB:BB:BB)

后果

  • 中间人攻击(窃听、篡改)

  • 断网攻击(发送错误的MAC)

  • 会话劫持

2. 防御措施

防御手段原理有效性
静态ARP手动绑定IP-MAC有效但维护成本高
DAI(动态ARP检测)交换机验证ARP包企业级有效
端口安全限制端口上的MAC数量部分有效
加密通信(HTTPS/SSH)即使被欺骗也无法解密保护数据内容

3. 检测ARP欺骗

Windows命令:

# 查看ARP缓存 arp -a # 检查网关MAC是否一致 # 如果网关IP对应多个MAC,可能被攻击

Linux工具:

# 使用arpwatch监控异常 sudo arpwatch -i eth0 # 使用arp-scan扫描网络 sudo arp-scan --localnet

八、ARP在不同网络环境中的行为

1. 普通交换机环境

  • ARP广播会泛洪到所有端口

  • 所有设备都能收到ARP请求

2. VLAN环境

  • ARP广播只在同一VLAN内传播

  • 不同VLAN需要三层设备(路由器)转发

3. 无线网络(Wi-Fi)

  • 工作方式相同

  • 但AP可能开启"AP隔离"阻止无线设备间ARP

4. 广域网(互联网)

  • ARP不会跨越路由器

  • 广域网使用其他地址解析协议(如Frame Relay的InARP)

九、常见问题排查

问题1:ping不通同网段设备

# 1. 检查ARP缓存 arp -a | findstr "192.168.1.3" # 2. 手动清空缓存 arp -d 192.168.1.3 # 3. 抓包分析 tcpdump -i eth0 arp and host 192.168.1.3

问题2:ARP响应很慢

可能原因:

  • 目标主机IP冲突(多个设备响应)

  • 交换机开启了ARP限速

  • 防火墙阻止了ARP

问题3:跨网段通信失败但同网段正常

检查:默认网关配置是否正确

# Windows route print # Linux ip route show

十、ARP与IPv6:NDP协议

在IPv6中,ARP被邻居发现协议(NDP,Neighbor Discovery Protocol)取代:

对比项ARP(IPv4)NDP(IPv6)
协议层独立的L2.5协议ICMPv6的一部分
报文类型ARP请求/响应邻居请求(NS)/邻居公告(NA)
广播使用广播使用组播(更高效)
安全性无内置安全支持SEND安全扩展
附加功能仅地址解析地址解析+路由器发现+重定向

总结:ARP核心要点

  1. 本质:IP到MAC的映射服务

  2. 范围:严格限制在同一局域网(广播域)

  3. 工作方式:请求广播,响应单播

  4. 缓存:动态条目有时间限制(约2分钟)

  5. 安全:容易被欺骗,需配合防御措施

  6. 替代:IPv6使用NDP替代ARP

一句话记忆:ARP就是局域网里的"电话查询台"——你知道对方的名字(IP),通过它查到对方的电话号码(MAC),然后才能打电话(发数据)。

Wireshark抓取ARP包并分析

下面将通过实际操作,使用Wireshark抓取ARP数据包,并详细分析请求包和响应包的报文结构。


一、准备工作

1.1 实验环境

  • 工具:Wireshark(参考:wireshark抓包工具简介及使用总结-CSDN博客)

  • 操作系统:Windows / Linux / macOS

  • 网络环境:需要连接到局域网(有线或无线均可)

1.2 操作前清空ARP缓存

为了让ARP过程清晰地展示出来,先清空本机的ARP缓存:

Windows:

# 查看当前ARP缓存 arp -a # 清空所有ARP缓存条目 arp -d

Linux/macOS:

# 查看当前ARP缓存 arp -n # 清空ARP缓存(Linux) sudo ip neigh flush all # 清空ARP缓存(macOS) sudo arp -d -a

二、使用Wireshark抓取ARP包

2.1 启动抓包

  1. 打开Wireshark,在主界面选择当前正在使用的网卡(如以太网或WLAN),双击开始抓包

  2. 设置显示过滤器:在过滤器中输入arp,这样只显示ARP协议的数据包,屏蔽其他干扰

    arp
  3. 触发ARP请求:打开命令行,ping一个同网段的IP地址(例如网关或其他设备)

    ping 192.168.0.103

    如果是首次通信,主机不知道目标IP对应的MAC地址,会先发送ARP请求

2.2 抓包结果示例

在Wireshark中会看到类似下面的数据包:


三、ARP请求包详细分析

3.1 以太网帧头部(Ethernet II)

选中第一个ARP请求包,在Packet Details面板中展开Ethernet II部分:

字段含义
Destinationff:ff:ff:ff:ff:ff目的MAC地址为广播地址,表示该帧会发送给局域网内所有设备
Source2c:f0:5d:6e:d9:b8源MAC地址,即发送方主机的物理地址
Type0x0806协议类型,0x0806表示上层封装的是ARP协议

3.2 ARP协议部分

展开Address Resolution Protocol部分:

字段含义
Hardware type1 (Ethernet)硬件类型,1表示以太网
Protocol type0x0800 (IPv4)协议类型,0x0800表示要解析的是IPv4地址
Hardware size6硬件地址长度,MAC地址占6字节
Protocol size4协议地址长度,IPv4地址占4字节
Opcode1 (request)操作码,1表示ARP请求,2表示ARP响应
Sender MAC address2c:f0:5d:6e:d9:b8发送方的MAC地址
Sender IP address192.168.0.108发送方的IP地址
Target MAC address00:00:00:00:00:00目标MAC地址(未知,所以填0)
Target IP address192.168.0.103目标IP地址(想要查询的IP)

3.3 请求包关键特征

  1. 以太网目的地址是全F(广播):因为不知道目标MAC,所以发给所有人

  2. 目标MAC地址是全0:表示该字段暂未知,等待填充

  3. Opcode = 1:标识这是一个请求包


四、ARP响应包详细分析

4.1 以太网帧头部

选中第二个ARP响应包,展开Ethernet II部分:

字段含义
Destination2c:f0:5d:6e:d9:b8目的MAC地址,正好是请求包中发送方的MAC地址
Source1a:1c:77:be:ed:8e源MAC地址,即响应方(被查询设备)的MAC地址
Type0x0806协议类型,仍然是ARP

4.2 ARP协议部分

展开Address Resolution Protocol部分:

字段含义
Hardware type1 (Ethernet)硬件类型,以太网
Protocol type0x0800 (IPv4)协议类型,IPv4
Hardware size6MAC地址长度
Protocol size4IP地址长度
Opcode2 (reply)操作码,2表示ARP响应
Sender MAC address1a:1c:77:be:ed:8e响应方的MAC地址(这正是请求方想知道的)
Sender IP address192.168.0.103响应方的IP地址
Target MAC address2c:f0:5d:6e:d9:b8请求方的MAC地址
Target IP address192.168.0.108请求方的IP地址

4.3 响应包关键特征

  1. 以太网目的地址是请求方的MAC(单播):响应只发给请求的那台主机

  2. Sender MAC地址就是请求方想查询的地址:请求包中的Target MAC现在被填充了

  3. Opcode = 2:标识这是一个响应包

  4. 源MAC和目标MAC与请求包正好交换:请求包的源变成了响应包的目标


五、完整ARP通信流程图

主机A (192.168.1.2) 交换机 主机B (192.168.1.1) MAC: AA:AA:AA:AA:AA:AA MAC: BB:BB:BB:BB:BB:BB | | | | ① ARP请求(广播) | | | "谁是192.168.1.1?" | | | 目的MAC: FF:FF:FF:FF:FF:FF | | | --------------------------> | --- 广播到所有端口 ---> | | | | | | ② 收到请求 | | 发现问的是自己 | | 记录A的IP和MAC | | | | ③ ARP响应(单播) | | | "我是,MAC=BB:BB:BB:BB:BB:BB"| | | 目的MAC: AA:AA:AA:AA:AA:AA | | | <-------------------------- | <------- 单播转发 ---------| | | | | ④ 更新ARP缓存 | | | 记录B的IP-MAC映射 | | | | | | ⑤ 开始正常通信 | |

六、通过命令行观察ARP缓存变化

在触发ARP请求之前和之后,使用arp -a命令查看缓存变化:

清空缓存后(请求前)

C:\> arp -a 没有列出任何条目。

Ping之后(缓存已更新)

C:\> arp -a

可以看到,目标IP192.168.0.103对应的MAC地址已经被记录到ARP缓存表中。


七、无偿ARP(Gratuitous ARP)

7.1 什么是无偿ARP

当主机配置了新的IP地址时,会主动发送一个ARP请求,询问自己的IP地址对应的MAC-5。

7.2 报文特征

  • 源IP = 目的IP = 自己的IP

  • 目的MAC =FF:FF:FF:FF:FF:FF(广播)

  • Opcode = 1(request)

7.3 作用

  1. IP地址冲突检测:如果收到响应,说明网络上已有其他设备使用该IP-5

  2. 更新其他设备的ARP缓存:当网卡更换或IP变更时,通知其他设备更新缓存

7.4 抓包示例

如果两台设备设置了相同的IP地址,Wireshark中会看到类似下面的现象:

No. Time Source Destination Info 1 0.000 PC1 (192.168.1.2) Broadcast Gratuitous ARP for 192.168.1.2 2 0.003 PC2 (192.168.1.2) PC1 ARP Response - IP already in use

PC2在设置IP后会发出无偿ARP,PC1收到后会回复响应,提示IP冲突-5。


八、常见问题排查

8.1 为什么抓不到ARP包?

  • 确认过滤器正确:输入arp(小写)

  • 确认ARP缓存为空:先用arp -d清空缓存

  • 尝试ping不存在的IP:ping一个局域网内不存在的IP,会持续发送ARP请求

  • 检查网卡选择:确保选择了正在使用的网卡(不是虚拟网卡)

8.2 ARP包为什么是42字节?

以太网最小帧长是64字节,ARP包本身28字节 + 以太网头部14字节 = 42字节,不足64字节的部分由填充字段(Padding)补齐。


九、总结:ARP请求包 vs 响应包对比

对比项ARP请求包ARP响应包
Opcode1 (request)2 (reply)
以太网目的MACff:ff:ff:ff:ff:ff(广播)请求方的MAC(单播)
目标MAC字段00:00:00:00:00:00(未知)请求方的MAC(已知)
发送方请求解析的主机被查询的主机
传播范围广播域内所有设备仅发给请求方

一句话总结:ARP请求是“谁有XXX IP的MAC地址?请告诉我”,通过广播发出;ARP响应是“我是XXX IP,我的MAC是YYY”,通过单播回复。

ARP一个不存在的ip地址

ARP时,如果目标ip不存在咋办

这是一个很实际的问题。答案是:如果目标IP地址在本地局域网中不存在,发送方会持续发送ARP请求,直到超时失败,最终返回“目标主机不可达”的错误。

下面详细拆解这个过程。

一、场景描述

假设:

  • 主机A:IP192.168.1.2,MACAA:AA:AA:AA:AA:AA

  • 目标IP:192.168.1.100(这个IP地址在当前局域网中没有任何设备使用)

主机A执行ping 192.168.1.100

二、完整流程

第1步:检查ARP缓存

主机A先查看自己的ARP缓存表:

C:\> arp -a 没有找到 192.168.1.100 的条目

缓存中没有目标IP的MAC地址,需要发送ARP请求。

第2步:发送ARP请求(广播)

主机A构造ARP请求包:

  • 以太网目的MAC =FF:FF:FF:FF:FF:FF(广播)

  • 请求内容:"谁是 192.168.1.100?请告诉 192.168.1.2"

这个广播包被交换机转发到局域网内的所有设备。

第3步:等待响应(超时机制)

  • 正常情况:如果目标IP存在,该设备会回复ARP响应(单播)

  • 异常情况:目标IP不存在,没有任何设备响应

主机A会等待一段时间(通常是1秒左右),如果没有收到响应,会再次发送ARP请求。

第4步:重试机制

不同操作系统的重试策略:

操作系统重试次数总超时时间
Windows3次约3秒
Linux3次约3秒
macOS3次约3秒

重试过程:

时间 0.000秒:发送第1个ARP请求 时间 1.000秒:未收到响应,发送第2个ARP请求 时间 2.000秒:未收到响应,发送第3个ARP请求 时间 3.000秒:仍未收到响应,判定失败

第5步:失败结果

ARP解析失败后,主机A无法封装以太网帧,应用程序(如ping)会收到错误:

Windows:

C:\> ping 192.168.1.100 Pinging 192.168.1.100 with 32 bytes of data: 请求超时。 请求超时。 请求超时。

Linux:

$ ping 192.168.1.100 From 192.168.1.2 icmp_seq=1 Destination Host Unreachable From 192.168.1.2 icmp_seq=2 Destination Host Unreachable

关键区别:Windows显示"请求超时"Linux显示"目标主机不可达"

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/20 9:21:19

Once、OnceCell、OnceLock:Rust 一次性初始化终极指南

Once、OnceCell、OnceLock&#xff1a;Rust 一次性初始化终极指南 在 Rust 开发中&#xff0c;我们经常会遇到一次性初始化的场景&#xff1a;比如全局配置加载、单例实例创建、资源初始化&#xff08;如数据库连接、日志器&#xff09;等。Rust 标准库提供了 Once、OnceCell …

作者头像 李华
网站建设 2026/4/20 9:21:16

你的“毛囊闭合”真的没救了?

引入&#xff1a;你的“毛囊闭合”真的没救了&#xff1f;你是否也有这样的经历&#xff1a;发缝悄悄变宽&#xff0c;头顶发量越来越稀疏&#xff0c;去理发店Tony老师说“你这毛囊可能闭合了&#xff0c;只能植发”&#xff1b;试过生姜擦头皮、各种防脱洗发水&#xff0c;却…

作者头像 李华
网站建设 2026/4/20 9:20:23

如何用ViGEmBus解决Windows游戏手柄兼容性难题:完整指南

如何用ViGEmBus解决Windows游戏手柄兼容性难题&#xff1a;完整指南 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 还在为Windows游戏手柄兼容性发愁吗&…

作者头像 李华