【问题标题】:How to enumerate all available network interfaces? [duplicate]如何枚举所有可用的网络接口? [复制]
【发布时间】:2011-07-09 23:25:16
【问题描述】:

如何枚举计算机上当前可用的所有网络接口(包括虚拟、未连接、环回等)?

我需要知道他们的 IP4/6、掩码、网关、DNS、WINS 等


语言: C++、WinAPI

系统: Windows 2000 及更高版本(包括 Win7)

【问题讨论】:

标签: c++ winapi networking interface enumeration


【解决方案1】:

听起来你想要几个不同功能的组合。

要获取适配器列表及其 IPv4 地址/掩码、关联的 WINS 服务器和 DNS 服务器,您可以使用GetAdaptersInfo。要获取 IPv6 地址,您可以使用GetAdaptersAddresses

取决于您的“等”中包含的内容。您可能还需要GetIfTableGetIfEntryGetIfTable 获取网络适配器列表。 GetIfEntry 为您获取有关每个的信息。这些检索诸如通过特定接口传输/检索的数据量之类的东西。还有一个 GetIfTable2/GetIfEntry2 仅适用于 Vista 和更新的获取更多信息的版本。

如果没记错,GetIfTable/GetIfEntry 列出所有机器中的接口。 GetAdaptersInfo 仅适用于“真正的”适配器。

【讨论】:

  • +1 谢谢,杰瑞。我将根据您的建议扩展@bmargulies 的解决方案
【解决方案2】:

看看http://www.codeproject.com/KB/IP/netcfg.aspx。这是你想做的一个巨大的例子。

【讨论】:

  • @bmarguliesm,您是真正的网络大师!非常感谢。
  • 我意识到这是一个真的旧答案,但您是否有机会对其进行编辑以符合 SO 的新质量标准? (即不是仅链接)
  • 我无法访问 Windows。随意做。
【解决方案3】:

您可以使用getaddrinfo ("..localmachine") 枚举Windows 2003+ 上的接口。

http://msdn.microsoft.com/en-us/library/ms738520(v=vs.85).aspx

带有 Service Pack 1 (SP1) 的 Windows 7 和带有 Service Pack 1 (SP1) 的 Windows Server 2008 R2 添加了对隐藏接口的支持。

http://support.microsoft.com/kb/2386184

【讨论】:

  • 这还没有投票?最优雅的解决方案!谢谢!
猜你喜欢
  • 2011-11-29
  • 1970-01-01
  • 2010-11-24
  • 1970-01-01
  • 2023-03-26
  • 2010-11-18
  • 2023-03-13
  • 2011-04-24
  • 1970-01-01
相关资源
最近更新 更多