2

返回不同的适配器列表

我想知道为什么GetIpAddrTable会返回比GetAdaptersAddresses. 候选原因如下(根据答案更新)。

候选人原因

  • IPv6 适配器:这些只会出现在GetAdaptersAddresses. 在此示例中,我有一个适配器的情况,该适配器具有 IPv4 和 IPv6 的链路本地 IP 地址,它没有显示在 GetIpAddrTable 的输出中。

背景

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

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

文件检查

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

在 Windows Server 2008 和 Windows Vista 上,GetIpAddrTable 函数返回的 IPv4 地址不受本地计算机上 TCP/IP 堆栈的媒体感知功能的影响。GetIpAddrTable 函数只返回有效的 IPv4 地址。

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

实施细节

  • 我们使用Belcarra USBLAN 以太网小工具驱动程序(为我们公司定制)
  • 我们希望我们的设备通过 DHCP 注册主机和设备
  • 驱动提供DHCP
  • 我们的第一个主机适配器是 169.254.142.9
  • 我们的第一个设备适配器是 169.254.142.10
  • 流向我们设备的流量不会在外部路由(本地链接)

GetIpAddrTable 结果

通常我们希望看到两个或三个网络适配器,而不是环回适配器。也许这个列表中存在 127.0.0.1 是问题的一部分——在正常工作的机器上通常不会观察到它。

  • 适配器 1:软件环回接口 1
  • 适配器 2:英特尔(R) 迅驰(R) Wireless-N 1030

GetAdaptersAddresses 结果

我已经按照返回的顺序列出了此函数返回的适配器。强调第一次调用的匹配适配器。ipconfig 输出中唯一不存在的适配器以粗体显示

  • 适配器 1:USBLAN 适配器
  • 适配器 2:Microsoft 虚拟 WiFi 微型端口适配器
  • 适配器 3:蓝牙设备(个人局域网)
  • 适配器 4:Intel(R) Centrino(R) Wireless-N 1030
  • 适配器 5:Realtek PCIe GBE 系列控制器
  • 适配器 6:软件环回接口 1
  • 适配器 7:Microsoft ISATAP 适配器
  • 适配器 8:Microsoft ISATAP 适配器 #2
  • 适配器 9:Teredo 隧道伪接口
  • 适配器 10:Microsoft ISATAP 适配器 #3
  • 适配器 11:Microsoft ISATAP 适配器 #4
  • 适配器 12:Microsoft ISATAP 适配器 #5

ipconfig /all 结果

请注意,软件环回适配器是唯一不存在的——这表明 ipconfig 在内部使用第二个函数或类似接口。

  • 适配器 1:USBLAN 适配器
  • 适配器 2:Microsoft 虚拟 WiFi 微型端口适配器
  • 适配器 3:蓝牙设备(个人局域网)
  • 适配器 4:Intel(R) Centrino(R) Wireless-N 1030
  • 适配器 5:Realtek PCIe GBE 系列控制器
  • 适配器 6:Microsoft ISATAP 适配器
  • 适配器 7:Microsoft ISATAP 适配器 #2
  • 适配器 8:Teredo 隧道伪接口
  • 适配器 9:Microsoft ISATAP 适配器 #3
  • 适配器 10:Microsoft ISATAP 适配器 #4
  • 适配器 11:Microsoft ISATAP 适配器 #5

交叉引用结果

除了软件环回接口之外,该命令似乎ipconfig /all返回了相同的数据。GetAdaptersAddresses我目前正在考虑切换我们的库以GetAdaptersAddresses解决此问题,但我担心为什么GetIpAddrTable没有返回预期结果。提前感谢您的任何意见!

相关问题

4

1 回答 1

1

GetIpAddrTable()只返回 IPv4 接口。

GetAdaptersAddresses()返回 IPv4 和/或 IPv6 适配器,单个适配器可以分配多个 IP 地址。

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

于 2012-11-26T22:33:33.983 回答