返回不同的适配器列表
我想知道为什么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
没有返回预期结果。提前感谢您的任何意见!