windows - GetIpAddrTable返回的适配器列表与GetAdaptersAddresses不同

标签 windows winapi networking

返回了不同的适配器列表

我想知道为什么GetIpAddrTable返回的网络适配器比GetAdaptersAddresses少的根本原因。候选原因如下(根据答案更新)。

候选原因

  • IPv6适配器:这些适配器仅在GetAdaptersAddresses中显示。在此示例中,我有一个适配器带有IPv4和IPv6本地链接IP地址的情况,该适配器地址未显示在GetIpAddrTable的输出中。

  • 背景

    我正在研究运行Windows 7 64位家庭高级版(版本:6.1.7601 Service Pack 1 Build 7601)的特定Dell笔记本电脑上GetIpAddrTable函数的问题。有问题的系统无法通过GetIpAddrTable检测到某些网络适配器。诊断结果如下。

    谁能解释为什么我可能会从这两个函数中看到如此截然不同的结果?我们已经使用GetIpAddrTable近两年了,没有任何问题。

    文件检查
    GetIpAddrTabledocumentation表示链接状态检测可能会导致XP出现问题,但是并没有给出适配器根本不显示的任何原因。似乎没有包含虚拟适配器,但我们的设备不是虚拟适配器(它是USB以太网)。

    On Windows Server 2008 and Windows Vista, the IPv4 addresses returned by the GetIpAddrTable function are not affected by the media sensing capability of the TCP/IP stack on a local computer. The GetIpAddrTable function returns only valid IPv4 addresses.



    在此系统上进行的测试中,我们具有有效的连接,但仅由GetAdaptersAddresses报告,而不由GetIpAddrTable报告。我怀疑Windows认为适配器无效,但是我不确定要测试什么以证实这一理论。数据包往返于设备,只是在IPv4地址映射表中不可见。

    实现细节
  • 我们使用Belcarra USBLAN ethernet gadget driver(为我们公司定制)
  • 我们希望我们的设备通过DHCP为主机和设备
  • 注册
  • 驱动程序提供DHCP
  • 我们的第一个主机适配器被赋予169.254.142.9
  • 我们的第一个设备适配器被赋予169.254.142.10
  • 到我们设备的流量未从外部路由(本地链接)

  • GetIpAddrTable结果

    通常,我们希望看到两个或三个网络适配器,而不会看到环回适配器。也许此列表中存在127.0.0.1是问题的一部分-在正常运行的计算机上通常不会观察到。
  • 适配器1:软件环回接口(interface)1
  • 适配器2:Intel(R)Centrino(R)Wireless-N 1030

  • GetAdaptersAddresses结果

    我已经按返回顺序列出了此函数返回的适配器。强调了第一次调用时匹配的适配器。 ipconfig输出中唯一不存在的适配器是粗体
  • 适配器1:USBLAN适配器
  • 适配器2:Microsoft虚拟WiFi微型端口适配器
  • 适配器3:蓝牙设备(个人局域网)
  • 适配器4:Intel(R)Centrino(R)Wireless-N 1030
  • 适配器5:Realtek PCIe GBE系列 Controller
  • 适配器6:软件环回接口(interface)1
  • 适配器7:Microsoft ISATAP适配器
  • 适配器8:Microsoft ISATAP适配器#2
  • 适配器9:Teredo隧道伪接口(interface)
  • 适配器10:Microsoft ISATAP适配器#3
  • 适配器11:Microsoft ISATAP适配器#4
  • 适配器12:Microsoft ISATAP适配器#5

  • ipconfig/所有结果

    请注意,软件回送适配器是唯一不存在的适配器-表示ipconfig在内部使用第二个功能或类似接口(interface)。
  • 适配器1:USBLAN适配器
  • 适配器2:Microsoft虚拟WiFi微型端口适配器
  • 适配器3:蓝牙设备(个人局域网)
  • 适配器4:Intel(R)Centrino(R)Wireless-N 1030
  • 适配器5:Realtek PCIe GBE系列 Controller
  • 适配器6:Microsoft ISATAP适配器
  • 适配器7:Microsoft ISATAP适配器#2
  • 适配器8:Teredo隧道伪接口(interface)
  • 适配器9:Microsoft ISATAP适配器#3
  • 适配器10:Microsoft ISATAP适配器#4
  • 适配器11:Microsoft ISATAP适配器#5

  • 交叉引用结果

    看起来ipconfig /all命令返回的数据与GetAdaptersAddresses相同,但软件环回接口(interface)除外。我目前正在考虑切换我们的库以使用GetAdaptersAddresses来解决此问题,但是我担心GetIpAddrTable为什么不返回预期结果。预先感谢您的任何投入!

    相关问题
  • Get an IP_ADDRESS_STRING from GetAdaptersAddresses()?
  • 最佳答案

    GetIpAddrTable()仅返回IPv4接口(interface)。
    GetAdaptersAddresses()返回IPv4和/或IPv6适配器,并且单个适配器可以分配有多个IP地址。

    您正在比较苹果和橙子,想知道为什么苹果比橙子少。

    关于windows - GetIpAddrTable返回的适配器列表与GetAdaptersAddresses不同,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13573007/

    相关文章:

    c++ - 如何将系统音量级别作为从 0 到 100 的标量?

    c++ - 设置服务访问规则

    c - 如何发送进程间消息?

    Python 网络/cidr 计算

    c++ - 设置 Windows 网络映射的标签

    windows - 适用于 Windows 的 python vlc 绑定(bind)

    ruby - 在 bash : no such file or directory 中安装 rvm 结果

    windows - 如何防止任务管理器杀死我的程序?

    c++ - 带有自定义数据的 SetWinEventHook

    linux - 在 Linux 上以编程方式重新加载网络设置