WindowsAPI|每天了解幾個winAPI接口之網絡配置相關文檔Iphlpapi.h詳細分析七

上一篇: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;而等于具有傳遞性&…