【发布时间】:2012-11-26 20:54:33
【问题描述】:
返回不同的适配器列表
我想知道为什么GetIpAddrTable 返回的网络适配器比GetAdaptersAddresses 少的根本原因。候选原因如下(根据答案更新)。
候选人原因
-
IPv6 适配器:这些只会出现在
GetAdaptersAddresses。在此示例中,我有一个适配器的情况,该适配器具有 IPv4 和 IPv6 的链路本地 IP 地址,它没有显示在 GetIpAddrTable 的输出中。
背景
我正在调查运行 Windows 7 64 位家庭高级版(版本:6.1.7601 Service Pack 1 Build 7601)的特定戴尔笔记本电脑上的 GetIpAddrTable 功能问题。有问题的系统无法通过GetIpAddrTable 检测到某些网络适配器。诊断结果如下。
谁能解释为什么我会从这两个函数中看到如此截然不同的结果?我们已经使用GetIpAddrTable 将近两年了,没有任何问题。
文档检查
GetIpAddrTable 的 documentation 表示链接状态检测可能会导致 XP 出现问题,但它没有给出任何适配器根本不显示的原因。 似乎不包括虚拟适配器,但我们的设备不是虚拟适配器(它是基于 USB 的以太网)。
在 Windows Server 2008 和 Windows Vista 上,返回的 IPv4 地址 通过 GetIpAddrTable 函数不受媒体感应的影响 本地计算机上 TCP/IP 堆栈的功能。 GetIpAddrTable 函数只返回有效的 IPv4 地址。
在我对该系统进行的测试中,我们有一个有效的连接,但它仅由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:软件环回接口 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 系列控制器
- 适配器 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 没有返回预期结果。提前感谢您的任何意见!
相关问题
【问题讨论】:
标签: windows winapi networking