上一篇:WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析六
如果有错误欢迎指正批评,在此只作为科普和参考。

C:\Program Files (x86)\Windows Kits\10\Include\10.0.22621.0\um\iphlpapi.h

文章目录

  • CreateIpNetEntry:把某个 IPv4 地址强行绑定到指定 MAC(或更新现有绑定)
      • 函数原型(简化)
      • 关键参数
      • 典型使用场景
      • 注意事项
      • 简单代码示例
  • ARP 缓存条目是什么
      • 为什么需要这张纸条?
      • 一条 ARP 缓存长什么样?
      • 存在哪里?
      • 生命周期
  • SetIpNetEntry:**用来“修改”一条已经存在的 ARP 缓存条目**
      • 功能一句话
      • 与 CreateIpNetEntry 的区别
      • 调用要点
      • 最小示例
      • 常见错误码
  • DeleteIpNetEntry:**把本机 ARP 缓存中的一条**(且仅一条)**已有条目删除**
      • 函数原型
      • 关键约束
      • 使用流程(典型)
      • 最小示例
      • 与 FlushIpNetTable 的区别
  • FlushIpNetTable:
      • 函数原型
      • 行为要点
      • 典型场景
      • 最小示例
      • 与 DeleteIpNetEntry 的关系
  • CreateProxyArpEntry:**让本机在指定接口上“假装”自己拥有某个 IP(段),从而替别人回答 ARP 请求——这就是 Proxy ARP(代理 ARP)。**
      • 1. 什么是 Proxy ARP?
      • 2. 函数原型
      • 3. 结果表现
      • 4. 典型场景
      • 5. 注意事项
      • 6. 最小示例
  • DeleteProxyArpEntry:撤销之前通过 `CreateProxyArpEntry` 建立的 Proxy ARP 代理范围
      • 函数原型
      • 成功后的效果
      • 常见返回值
      • 最小示例

CreateIpNetEntry:把某个 IPv4 地址强行绑定到指定 MAC(或更新现有绑定)


//////////////////////////////////////////////////////////////////////////////
//                                                                          //
// Used to create, modify or delete an ARP entry.  In all cases the dwIndex //
// dwAddr field MUST BE SPECIFIED.                                          //
// For a set, the complete MIB_IPNETROW structure must be specified         //
//                                                                          //
//////////////////////////////////////////////////////////////////////////////IPHLPAPI_DLL_LINKAGE
DWORD
WINAPI
CreateIpNetEntry(_In_ PMIB_IPNETROW    pArpEntry);

CreateIpNetEntry 是 Windows IP 帮助库(iphlpapi.dll)导出的一个 API 函数,用于 创建或修改本机的 ARP 缓存条目。它的核心功能是:往 IPv4 邻居缓存(ARP 表)里“写”一个条目,实现 IP 地址到 MAC 地址的静态映射。


函数原型(简化)

DWORD CreateIpNetEntry(_In_ const MIB_IPNETROW *pArpEntry
);
  • 返回值DWORD
    • NO_ERROR(0)表示成功;
    • 其他 Win32 错误码表示失败,常见如 ERROR_INVALID_PARAMETERERROR_NOT_SUPPORTED 等。

关键参数

typedef struct _MIB_IPNETROW {DWORD dwIndex;     // 对应本地接口的索引(LUID),**必须正确**DWORD dwPhysAddrLen;BYTE  bPhysAddr[MAXLEN_PHYSADDR]; // 目标 MAC 地址DWORD dwAddr;      // 目标 IPv4 地址(网络字节序),**必须指定**DWORD dwType;      // 条目类型:static(4)、dynamic(3) 等
} MIB_IPNETROW, *PMIB_IPNETROW;
  • dwIndex:通过 GetAdaptersInfoGetIfTable 等 API 获取,指明要把 ARP 条目绑到哪块网卡。
  • dwAddr:要映射的 IPv4 地址(如 192.168.1.100)。
  • bPhysAddr:对应的 MAC 地址(如 00-11-22-33-44-55)。
  • dwType
    • MIB_IPNET_TYPE_STATIC(4)→ 静态条目,重启后仍保留,除非手动删除。
    • MIB_IPNET_TYPE_DYNAMIC(3)→ 动态条目,随 ARP 老化机制自动过期。
      通常创建“永久”映射时设为 STATIC

典型使用场景

  1. 手动添加静态 ARP 条目
    避免局域网内目标主机被 ARP 欺骗,或为了在脚本里预先绑定关键服务器。
  2. 网络诊断/管理工具
    如自己写个“arp -s”替代品,或集成到网管软件里。
  3. 驱动或安全软件
    在驱动层之上快速写入静态邻居条目,防止某些攻击。

注意事项

  • 权限:调用进程需具备 管理员权限SeLoadDriverPrivilegeSeManageVolumePrivilege 在某些系统上也可能要求)。
  • IPv4 Only:该 API 只操作 IPv4 ARP 缓存。IPv6 邻居缓存请用 CreateUnicastIpAddressEntrySetIpNetEntry2
  • 已有条目:如果 (dwIndex, dwAddr) 已存在,函数会更新该条目(相当于 Set 操作)。
  • 删除条目:用 DeleteIpNetEntryFlushIpNetTable

简单代码示例

MIB_IPNETROW arp = {0};
arp.dwIndex       = IfIndex;          // 网卡索引
arp.dwAddr        = inet_addr("192.168.1.100");
arp.dwPhysAddrLen = 6;
memcpy(arp.bPhysAddr, "\x00\x11\x22\x33\x44\x55", 6);
arp.dwType        = MIB_IPNET_TYPE_STATIC; // 静态DWORD ret = CreateIpNetEntry(&arp);
if (ret == NO_ERROR) {printf("ARP entry added.\n");
} else {printf("Error: %lu\n", ret);
}

一句话总结:
CreateIpNetEntry 就是“以编程方式执行 arp -s”的 Win32 API,用来把某个 IPv4 地址强行绑定到指定 MAC(或更新现有绑定)。

ARP 缓存条目是什么

ARP 缓存条目(ARP Cache Entry)就是操作系统在内存里“记的一张小纸条”:
把某个 IP 地址暂时或永久地对应到某个 MAC 地址


为什么需要这张纸条?

局域网通信时,数据链路层(以太网/Wi-Fi)只看 MAC 地址(形如 00:11:22:33:44:55)。
但应用程序只知道 IP 地址(如 192.168.1.10)。
于是操作系统必须在发送数据包前,先回答:

“192.168.1.10 对应的 MAC 是多少?”

这个“查表 + 找不到就广播询问”的过程就是 ARP(Address Resolution Protocol)

为了避免每次都广播,操作系统把“问到的答案”缓存起来——这就是 ARP 缓存条目


一条 ARP 缓存长什么样?

在 Windows 上用 arp -a 可以看到:

Internet Address      Physical Address      Type
192.168.1.1          00-11-22-33-44-55     dynamic
192.168.1.100        66-77-88-99-aa-bb     static
  • Internet Address:目标 IPv4 地址
  • Physical Address:对方的 MAC 地址
  • Type
    • dynamic:动态条目,默认存活 2 分钟~10 分钟(可配置),超时自动删除。
    • static:静态条目,除非手动删除或重启,否则长期保留。

存在哪里?

  • Windows:内核的一块内存数据结构(可通过 GetIpNetTable API 读取)。
  • Linux/proc/net/arpip neigh 命令查看。

生命周期

  1. 首次通信 → 发 ARP 请求广播 → 收到 ARP 应答 → 写入动态条目。
  2. 继续通信 → 每用一次就刷新“老化计时器”。
  3. 超时未用 → 动态条目被删除。
  4. 管理员手动 → 用 arp -sCreateIpNetEntry 创建静态条目,永不过期。

一句话总结:
ARP 缓存条目就是“IP 与 MAC 的映射关系表里的某一行”,让操作系统在局域网里发数据包时,不必每次都重新问“谁有 IP x.x.x.x?”

SetIpNetEntry:用来“修改”一条已经存在的 ARP 缓存条目

IPHLPAPI_DLL_LINKAGE
DWORD
WINAPI
SetIpNetEntry(_In_ PMIB_IPNETROW    pArpEntry);

SetIpNetEntry 与刚才介绍的 CreateIpNetEntry 同属 iphlpapi.dll,用来“修改”一条已经存在的 ARP 缓存条目,而不是新建一条。


功能一句话

把本地 ARP 表里已有的 (接口, IPv4) 对应关系更新成新的 MAC 或新的类型(dynamic / static)。


与 CreateIpNetEntry 的区别

API条目不存在时的行为条目已存在时的行为典型用途
CreateIpNetEntry新建更新相当于 arp -s
SetIpNetEntry返回错误 (ERROR_NOT_FOUND)更新只改已有条目

调用要点

  1. 必须保证 MIB_IPNETROW
    • dwIndex(接口索引)
    • dwAddr(IPv4 地址)
      与现有条目 完全一致,否则函数会失败。
  2. 可以修改:
    • 目标 MAC (bPhysAddr)
    • 条目类型 (dwType):dynamic → static 或反之
  3. 权限:同样需要管理员权限。

最小示例

MIB_IPNETROW row = {0};
// 1. 先取出现有条目(这里仅演示,实际用 GetIpNetTable 找到)
row.dwIndex = 7;                       // 本机接口索引
row.dwAddr  = inet_addr("192.168.1.1");// 要改的 IP
memcpy(row.bPhysAddr, "\xAA\xBB\xCC\xDD\xEE\xFF", 6);
row.dwPhysAddrLen = 6;
row.dwType = MIB_IPNET_TYPE_STATIC;    // 把 dynamic 改成 staticDWORD ret = SetIpNetEntry(&row);
if (ret == NO_ERROR) {printf("ARP entry updated.\n");
} else {printf("Error: %lu\n", ret);
}

常见错误码

  • ERROR_NOT_FOUND(1168)
    → 指定的 (接口, IP) 组合在 ARP 表里不存在。
  • ERROR_INVALID_PARAMETER(87)
    → 参数不合法(MAC 长度、接口索引、地址格式等)。

一句话总结:
SetIpNetEntry 就是“只能改、不能建”的 ARP 表编辑 API;当你想 更新 某条已有邻居条目的 MAC 或类型时就用它。

DeleteIpNetEntry:把本机 ARP 缓存中的一条(且仅一条)已有条目删除

IPHLPAPI_DLL_LINKAGE
DWORD
WINAPI
DeleteIpNetEntry(_In_ PMIB_IPNETROW    pArpEntry);

DeleteIpNetEntry 是 iphlpapi.dll 提供的 API,用于把本机 ARP 缓存中的一条(且仅一条)已有条目删除
换句话说,它是“以编程方式执行 arp -d <IP>”的函数版本。


函数原型

DWORD WINAPI DeleteIpNetEntry(_In_ PMIB_IPNETROW pArpEntry
);
  • 返回值
    • NO_ERROR (0) 删除成功
    • ERROR_NOT_FOUND (1168) 指定条目不存在
    • ERROR_INVALID_PARAMETER 参数非法
    • 其他 Win32 错误码

关键约束

  1. 必须提供
    • dwIndex(本地接口索引)
    • dwAddr(IPv4 地址,网络字节序)
      这两个字段合在一起充当“主键”,精确匹配要删的那一行。
  2. 其余字段可忽略
    函数只看 (dwIndex, dwAddr),MAC 地址、类型等字段不会被比对。
  3. 权限
    需要管理员权限;非特权进程调用会失败(ERROR_ACCESS_DENIED)。

使用流程(典型)

  1. 先用 GetIpNetTable 枚举当前 ARP 表,找到要删的条目,把其 dwIndexdwAddr 拷出来。
  2. 填充一个 MIB_IPNETROW,仅填这两个关键字段即可。
  3. 调用 DeleteIpNetEntry

最小示例

MIB_IPNETROW entry = {0};
entry.dwIndex = 7;                       // 网卡接口索引
entry.dwAddr  = inet_addr("192.168.1.100"); // 要删除的 IPDWORD err = DeleteIpNetEntry(&entry);
if (err == NO_ERROR) {printf("ARP entry deleted.\n");
} else {printf("Delete failed: %lu\n", err);
}

与 FlushIpNetTable 的区别

  • DeleteIpNetEntry
    删除单条指定 (接口, IP) 的条目。
  • FlushIpNetTable
    整张接口的 ARP 表全部清空(暴力版 arp -d *)。

一句话总结:
DeleteIpNetEntry 就是“精确制导”地删掉某个接口下某个 IPv4 地址对应的 ARP 缓存行;条目必须已存在,否则返回 ERROR_NOT_FOUND

FlushIpNetTable:

IPHLPAPI_DLL_LINKAGE
DWORD
WINAPI
FlushIpNetTable(_In_ DWORD   dwIfIndex);

FlushIpNetTable 是 iphlpapi.dll 提供的“一键清空”接口——
把指定网卡接口(由 dwIfIndex 标识)的整张 IPv4 ARP 缓存表全部刷掉,相当于在该接口上执行 arp -d *(Windows 无此命令行,但效果类似)。


函数原型

DWORD WINAPI FlushIpNetTable(_In_ DWORD dwIfIndex   // 要清空的接口索引
);
  • 返回值
    • NO_ERROR (0) 成功
    • ERROR_INVALID_PARAMETER:接口索引无效
    • 其他 Win32 错误码(如权限不足)

行为要点

  1. 作用范围
    仅影响 dwIfIndex 对应的接口;其他接口的 ARP 表保持不变。
  2. 清空内容
    该接口下 所有动态条目 立即被删除;静态条目 不受影响(静态条目需用 DeleteIpNetEntry 或重启才能移除)。
  3. 触发后续 ARP 广播
    清空后,如果进程再次访问这些 IP,系统会重新发起 ARP 请求广播。
  4. 权限
    需要管理员权限;普通进程返回 ERROR_ACCESS_DENIED

典型场景

  • 网络故障排查:怀疑 ARP 缓存被污染,先整体清掉再观察。
  • DHCP/网络切换:接口刚拿到新的网段地址,清掉旧网段残留的条目。
  • 安全/测试工具:模拟“ARP 表刷新”。

最小示例

DWORD dwIfIndex = 7;   // 例:有线网卡接口索引
DWORD err = FlushIpNetTable(dwIfIndex);
if (err == NO_ERROR) {printf("Interface %lu ARP table flushed.\n", dwIfIndex);
} else {printf("Flush failed: %lu\n", err);
}

与 DeleteIpNetEntry 的关系

API粒度影响静态条目?
DeleteIpNetEntry单条(IP + 接口)可以删除
FlushIpNetTable整接口所有动态条目不删除静态

一句话总结:
FlushIpNetTable 就是“把某块网卡的 IPv4 ARP 缓存瞬间格式化”,只留下静态条目,动态邻居全部强制失效并重新解析。

CreateProxyArpEntry:让本机在指定接口上“假装”自己拥有某个 IP(段),从而替别人回答 ARP 请求——这就是 Proxy ARP(代理 ARP)。


//////////////////////////////////////////////////////////////////////////////
//                                                                          //
// Used to create or delete a Proxy ARP entry. The dwIndex is the index of  //
// the interface on which to PARP for the dwAddress.  If the interface is   //
// of a type that doesnt support ARP, e.g. PPP, then the call will fail     //
//                                                                          //
//////////////////////////////////////////////////////////////////////////////IPHLPAPI_DLL_LINKAGE
DWORD
WINAPI
CreateProxyArpEntry(_In_  DWORD   dwAddress,_In_  DWORD   dwMask,_In_  DWORD   dwIfIndex);

CreateProxyArpEntry 作用一句话:让本机在指定接口上“假装”自己拥有某个 IP(段),从而替别人回答 ARP 请求——这就是 Proxy ARP(代理 ARP)。


1. 什么是 Proxy ARP?

  • 当主机 A 想访问 IP X,但 X 并不在本子网,按常理 A 应该先把包发给网关。
  • 如果网关上启用了 Proxy ARP,它会回应 A 的 ARP 请求:
    “IP X 的 MAC 就是我的 MAC”。
    于是 A 把数据直接发到网关 MAC,再由网关转发到真正的 X整个过程对 A 完全透明

2. 函数原型

DWORD WINAPI CreateProxyArpEntry(_In_ DWORD dwAddress,  // 起始 IPv4 地址(网络字节序)_In_ DWORD dwMask,     // 子网掩码(决定范围)_In_ DWORD dwIfIndex   // 在哪个接口上代答
);
  • dwAddress + dwMask 共同描述 要代理的 IP 范围
    例如 192.168.1.0 + 255.255.255.0 → 代理整个 /24
  • dwIfIndex 必须是支持 ARP 的接口(以太网、Wi-Fi 等);PPP/隧道接口会返回 ERROR_NOT_SUPPORTED

3. 结果表现

调用成功后,内核在该接口上:

  • 接收 任何落在这个 IP 范围内的 ARP 请求
  • 立即回发 ARP Reply,源 MAC 填本机接口 MAC;
  • 后续数据包由本机按路由表转发给真正的目标。

4. 典型场景

  • 无感知网关
    老设备不懂子网,只能广播 ARP。网关用 Proxy ARP 让它以为所有地址都在本地 LAN。
  • 地址迁移/透明迁移
    临时把某段地址代理到新网关,无需修改终端配置。
  • VPN/拨号服务器
    让远程客户端仿佛直接位于公司局域网。

5. 注意事项

  • 仅 IPv4;IPv6 用 NDP Proxy。
  • 需要 管理员权限
  • 删除用 DeleteProxyArpEntry(参数完全一致)。
  • 不会自动加路由,必须确保本机能把流量正确转发到真正目的地,否则虽有 ARP 回复,数据仍会黑洞。

6. 最小示例

DWORD dwAddr = inet_addr("192.168.10.0");   // 起始地址
DWORD dwMask = inet_addr("255.255.255.0");  // /24
DWORD dwIdx  = 7;                           // 以太网接口索引DWORD err = CreateProxyArpEntry(dwAddr, dwMask, dwIdx);
if (err == NO_ERROR)printf("Proxy ARP enabled on 192.168.10.0/24\n");
elseprintf("Error: %lu\n", err);

一句话再总结:
CreateProxyArpEntry 让指定网卡“撒谎”说自己拥有某一段 IP,从而充当透明的 ARP 代理,把 ARP 请求全部揽到自己身上,再负责把数据包真正送出去。

DeleteProxyArpEntry:撤销之前通过 CreateProxyArpEntry 建立的 Proxy ARP 代理范围

IPHLPAPI_DLL_LINKAGE
DWORD
WINAPI
DeleteProxyArpEntry(_In_  DWORD   dwAddress,_In_  DWORD   dwMask,_In_  DWORD   dwIfIndex);

DeleteProxyArpEntryCreateProxyArpEntry逆向操作

  • 功能:在指定接口上,撤销之前通过 CreateProxyArpEntry 建立的 Proxy ARP 代理范围
  • 参数必须与创建时完全一致dwAddressdwMaskdwIfIndex),否则系统找不到对应条目而返回 ERROR_NOT_FOUND

函数原型

DWORD WINAPI DeleteProxyArpEntry(_In_ DWORD dwAddress,  // 起始 IPv4 地址(网络字节序)_In_ DWORD dwMask,     // 子网掩码_In_ DWORD dwIfIndex   // 接口索引
);

成功后的效果

  • 该接口停止为指定 IP 段代答 ARP 请求。
  • 终端下次 ARP 该段地址时,将收不到代理回复,只能得到真实主机或网关的响应(若存在)。
  • 对已建立的流量连接无影响,仅对新 ARP 请求生效。

常见返回值

含义
NO_ERROR (0)删除成功
ERROR_NOT_FOUND (1168)指定 (地址/掩码/接口) 的组合不存在
ERROR_INVALID_PARAMETER参数非法
ERROR_ACCESS_DENIED权限不足(需管理员)

最小示例

// 撤销先前对 192.168.10.0/24 的 Proxy ARP
DWORD addr = inet_addr("192.168.10.0");
DWORD mask = inet_addr("255.255.255.0");
DWORD idx  = 7;   // 对应接口DWORD err = DeleteProxyArpEntry(addr, mask, idx);
if (err == NO_ERROR)printf("Proxy ARP entry removed.\n");
elseprintf("Failed: %lu\n", err);

一句话总结:
DeleteProxyArpEntry 用来“注销” Proxy ARP 代理范围,让接口不再冒充指定网段的 IP 地址去回应 ARP 请求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/bicheng/94109.shtml
繁体地址,请注明出处:http://hk.pswp.cn/bicheng/94109.shtml
英文地址,请注明出处:http://en.pswp.cn/bicheng/94109.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32F407VGT6从零建立一个标准库工程模板+VSCode或Keil5

一、前言 下载平台:STM32F407ZGT6 代码使用平台:VSCode 编译器:arm-none-aebi-gcc ---- 默认你已经安装 程序下载工具:STlink ---- 默认你拥有 批处理工具:make ---- 默认你已经安装 使用此方法可以不借助其它插件&#xff0c;例如:STM32EIDE。这个方法已经经过验证可以在STM3…

佩京VR党建工作站-党建VR系统-VR党建展厅

VR党建工作站是一种依托VR虚拟现实技术的数字化党建文化学习工具。它通过将丰富的学习内容植入到智慧党建科技产品中&#xff0c;构建出沉浸式的学习场景&#xff0c;从而创新了体验式学习模式&#xff0c;促进了党员的自主学习。VR党建工作站核心功能&#xff1a;1、了解实时新…

Kotlin 协程之Channel的概念和基本使用

前言 在 专栏 之前的文章中&#xff0c;我们已经知道了协程的启动、挂起、取消、异常以及常用的协程作用域等基础应用。 这些基础应用适合的场景是一次性任务&#xff0c;执行完就结束了的场景。 launch / async 适合的场景 网络请求数据库查询文件读写并行计算任务等等 而…

安装使用Conda

文章目录Linux安装 Conda&#xff08;Miniconda 或 Anaconda&#xff09;​Miniconda (轻量版)激活配置Windows安装配置 Conda​添加清华镜像源加速创建并激活 Conda 环境验证步骤​安装项目依赖运行项目Linux安装 Conda&#xff08;Miniconda 或 Anaconda&#xff09;​ Mini…

面向智能空战的深度强化学习技术综述

CSDN大礼包《大模型课程》 CSDN大礼包《深度强化学习课程》 CSDN大礼包《人工智能平台设计开发课程》

DeepSeek-V3.1 Claude Code: 革命性的AI编码助手详解与应用指南

DeepSeek-V3.1 & Claude Code: 革命性的AI编码助手详解与应用指南 今天 DeepSeek模型已支持接入 Claude Code&#xff0c;我们来深入探讨Claude Code ——Anthropic 推出的一个强大工具。它不仅仅是一个简单的代码补全助手&#xff0c;而是一个嵌入终端的智能代理&#xf…

智能求职推荐系统

智能求职推荐系统 基于知识图谱和大语言模型的智能求职推荐系统&#xff0c;为求职者提供个性化岗位推荐和AI驱动的匹配分析。 &#x1f680; 系统特性 智能推荐: 基于知识图谱的多维度职位匹配AI分析: 集成DeepSeek大模型提供深度分析和建议可视化展示: 使用ECharts展示推荐结…

瑞芯微:AIoT芯片领航者的全栈突围与生态崛起

一、业绩高速增长的底层逻辑​​瑞芯微的持续爆发式增长源于三大关键支柱&#xff1a;技术纵深​​&#xff1a;深耕“大音频、大视频、大感知、大软件”四大核心技术矩阵&#xff0c;自研NPU/ISP/编解码等核心IP持续迭代&#xff1b;精准定位​​&#xff1a;瞄准边缘侧与端侧…

【报错】Please do not run this script with sudo bash

目录 报错 分析 解决方法 扩展 报错分析 安装conda 报错 Please do not run this script with sudo bash: showHelp: command not found 分析 脚本有以下要求: 不能以root身份运行(当前是root用户)

多线程—飞机大战排行榜功能(2.0版本)

&#xff08;一&#xff09;实现功能&#xff1a; 1.基础的成绩排序 2.相同成绩随机排名 3.用户名注册重复 &#xff08;二&#xff09;效果视频&#xff1a; &#xff08;三&#xff09;代码实现&#xff1a; 3.1 && 3.2 在FileRead类中新增方法如下:具体的代码实现&a…

React + Antd+TS 动态表单容器组件技术解析与实现

概述在现代前端应用中&#xff0c;表单是用户交互的核心部分。本文将深入分析一个基于 React 和 Ant Design 的高级动态表单容器组件&#xff0c;它提供了强大的可配置性、灵活的布局选项和丰富的功能扩展能力。组件核心特性1. 高度可配置的表单结构interface FormContainerPro…

51c自动驾驶~合集16

自己的原文哦~ https://blog.51cto.com/whaosoft/11739891 #CLIP系列模型如何补短板再升级 CLIP&#xff08;Contrastive Language–Image Pre-training&#xff09;模型自推出以来&#xff0c;在图像-文本跨模态理解和生成领域取得了显著成果。然而&#xff0c;经…

分级设色地图/标注式统计地图-中国地图绘制

分级设色地图/标注式统计地图‌1. 这种图长什么样&#xff1f;‌2. 核心应用场景‌3. 工具3.1 自己找数据3.2 智图小易司3.2 Flourish3.3 镝数图表注意事项当你看到一张中国地图&#xff0c;各省份颜色深浅不一&#xff0c;旁边还标注着具体数值时&#xff0c;这种图就是‌分级…

2025最新华为云国际版注册图文流程-不用绑定海外信用卡注册

说到华为云&#xff0c;很多人第一反应就是“大厂可靠、服务全”。确实&#xff0c;作为全球知名的云计算服务商&#xff0c;华为云在企业级项目和个人开发者中都挺受欢迎。今天我就带你一步一步走一遍华为云国际版的注册流程&#xff0c;让新手也能轻松上手。下面是最简单的注…

Android 人脸识别技术全解析

人脸识别作为生物识别技术的核心分支&#xff0c;已广泛应用于考勤打卡、身份验证、支付安全等场景。在 Android 平台&#xff0c;实现人脸识别需要兼顾准确性、实时性和设备兼容性三大挑战。本文将系统讲解 Android 人脸识别的技术选型、核心实现、性能优化及安全加固&#xf…

STM32项目分享:基于STM32单片机驾驶安全监测系统设计

“我们不做一锤子买卖&#xff0c;只做技术成长的长期伙伴&#xff01;” 目录 一、视频展示 二、项目简介 三、原理图设计 四、PCB硬件设计 五、程序设计 六、资料分享 一、视频展示 基于stm32单片机驾驶行为监测系统设计 -视频分享二、项目简介 题目&#xff1a;基于s…

【GaussDB】使用gdb定位GaussDB编译package报错

【GaussDB】使用gdb定位GaussDB编译package报错 背景 在某次迁移Oracle到GaussDB时&#xff0c;应用开发人员将改好的package在GaussDB里进行创建&#xff0c;没有ERROR也没有WARNING&#xff0c;但是编译无效对象的时候报错了。虽然已经找到了是哪个包编译报错&#xff0c;但…

One Commander:强大的Windows文件管理器

在日常使用电脑的过程中&#xff0c;文件管理和浏览是必不可少的任务。One Commander作为一款功能强大的Windows文件管理器&#xff0c;提供了丰富的功能和便捷的操作方式&#xff0c;帮助用户更高效地管理和浏览文件。它不仅支持多种文件操作&#xff0c;还提供了丰富的自定义…

SPUpDate Application 程序卸载

我安装了 EzvizStudioSetups.exe 软件&#xff0c;卸载后会在电脑遗留 SPUpDate Application 程序&#xff1b;在某一时刻会占用 CPU 资源&#xff1b;应用卸载方法一&#xff1a;在任务管理器搜索 SPUpDate Application&#xff1b;定位到文件位置&#xff1b;我的路径如下C:\…

算法题(187):程序自动分析

审题&#xff1a; 本题需要我们判断是否可以同时满足题目给定的若干等式或不等式&#xff0c;判断出后根据结果输出YES或NO 思路&#xff1a; 方法一&#xff1a;离散化并查集 使用并查集&#xff1a;其实题目中只存在两者相等或不等两种情况&#xff0c;而等于具有传递性&…