You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否存在已文档化的WinAPI方法以获取已断开网络适配器的静态IP地址?

是否存在已文档化的WinAPI方法以获取已断开网络适配器的静态IP地址?

当然有啦!完全不用再依赖那些不稳定的未文档化代码冒风险了,Windows提供了几个官方文档化的WinAPI,能稳定获取到即使网络断开的适配器的静态IP配置,效果和你用netsh interface ip show ipaddresses命令拿到的信息完全一致。

最推荐的是GetAdaptersAddresses这个核心API,它是微软官方完全文档化的,能枚举系统里所有网络适配器(包括已断开连接的),并返回完整的IP配置信息。使用的时候要注意设置正确的标志位:

  • 调用时指定GAA_FLAG_INCLUDE_ALL_INTERFACES,这样就不会过滤掉处于断开状态的适配器
  • 如果还需要网关、DNS等额外配置,可以搭配GAA_FLAG_INCLUDE_GATEWAYS、GAA_FLAG_INCLUDE_DNS_SERVERS这类标志

具体用起来也不复杂:

  1. 先以空缓冲区调用一次GetAdaptersAddresses,拿到需要的缓冲区大小
  2. 分配足够的内存作为输出缓冲区
  3. 再次调用GetAdaptersAddresses,地址族传AF_UNSPEC就能同时获取IPv4和IPv6地址,再带上之前说的标志位
  4. 遍历返回的IP_ADAPTER_ADDRESSES链表,每个节点对应一个适配器,节点里的FirstUnicastAddress链表就是这个适配器的所有IP地址
  5. 每个IP_ADAPTER_UNICAST_ADDRESS节点里的Sockaddr字段能拿到具体的IP地址,还可以通过PrefixOrigin字段判断这个IP是静态配置的(对应IP_PREFIX_ORIGIN_MANUAL)还是DHCP分配的

如果你只需要IPv4的基础信息,GetIpAddrTable也是个文档化的选项,它返回的IP地址表也会包含已断开适配器的静态配置,不过它的信息不如GetAdaptersAddresses全面,如果你需要更多适配器相关的细节,还是前者更合适。

你之前用的那种未文档化的C函数,虽然现在能用,但微软随时可能在系统更新里修改内部实现,到时候程序要么崩要么拿不到数据,换成这些官方API就完全没这个顾虑了,在Windows XP及以上的系统都能稳定运行。

备注:内容来源于stack exchange,提问作者George Robinson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:09:29