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

时间:2012-11-26 20:54:34

标签: windows winapi networking

返回不同的适配器列表

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

候选理由

  • IPv6适配器:这些只会显示GetAdaptersAddresses。在这个例子中,我有一个适配器,其中包含IPv4和IPv6的链接本地IP地址,这些地址未显示在GetIpAddrTable的输出中。

背景

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

任何人都可以解释为什么我会看到这两种功能出现如此截然不同的结果?我们已经使用GetIpAddrTable近两年没有任何问题。

文档检查

GetIpAddrTable的{​​{3}}表示链接状态检测可能会导致XP出现问题,但它没有说明适配器根本无法显示的任何原因。 似乎不包含虚拟适配器,但我们的设备不是虚拟适配器(它是USB以太网)。

  

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

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

实施细则

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

GetIpAddrTable结果

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

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

GetAdaptersAddresses结果

我已经按照返回的顺序列出了此函数返回的适配器。来自第一个呼叫的匹配适配器强调。 ipconfig输出中不存在的唯一适配器是粗体

  • 适配器1:USBLAN适配器
  • 适配器2:Microsoft Virtual WiFi Miniport Adapter
  • 适配器3:蓝牙设备(个人局域网)
  • 适配器4:英特尔(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 Virtual WiFi Miniport Adapter
  • 适配器3:蓝牙设备(个人局域网)
  • 适配器4:英特尔(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没有返回预期的结果。提前感谢任何输入!

相关问题

1 个答案:

答案 0 :(得分:1)

GetIpAddrTable()仅返回IPv4接口。

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

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