【问题标题】:Detecting the Loopback Adapter检测环回适配器
【发布时间】:2009-10-07 02:04:13
【问题描述】:

检测网络接口是否为环回适配器的最佳方法是什么?

windows API 的 GetAdaptersInfoGetAdaptersAddresses 在文档中声明它们将通过 Type (MIB_IF_TYPE_LOOPBACK) 返回接口是否为环回但至少这些都不适用于 Microsoft Loopback Adapter,它被报告为标准以太网接口。

我可以尝试检查环回适配器的默认 MAC,但这很容易被欺骗。

我可以检查描述中的名称“Microsoft Loopback Adapter”,但这可能存在翻译问题并可能导致其他问题。

IP 地址也可以更改。

最可靠的方法是什么?

【问题讨论】:

  • AFAIK,环回适配器不应该报告 MIB_IF_TYPE_LOOPBACK。该适配器的全部目的是让应用程序使用外观和行为类似于任何其他以太网适配器的 IP 适配器在本地测试其套接字 I/O。 MIB_IF_TYPE_LOOPBACK 可能仅由管理实际环回 IP 的接口报告(IPV4 为 127.0.0.1,IPv6 为 0:0:0:0:0:0:0:1)。

标签: windows winapi network-programming


【解决方案1】:

Microsoft Loopback Adapter 用于伪造网络。它对你撒谎,因为那是它的目的。 MSDN citation.

Microsoft Loopback 适配器是一个 虚拟网络测试工具 网络访问的环境 无法使用。此外,您必须使用 环回适配器(如果有) 与网络适配器冲突或 带有网络适配器驱动程序。你可以 绑定网络客户端、协议和 其他网络配置项 环回适配器,你可以 安装网络适配器驱动程序或 网络适​​配器稍后同时保留 网络配置信息。 您还可以安装环回 无人值守期间的适配器 安装过程。

【讨论】:

  • 感谢凯文的解释。我知道环回适配器的用途,我只想能够检测到它。如果 MIB_IF_TYPE_LOOPBACK 类型从不返回,为什么还要包含它?
  • 我想您可以设想一个与“普通”适配器没有区别的环回适配器。无论如何,负责MIB_IF_TYPE_LOOPBACK 的人很有可能与Microsoft Loopback 适配器无关。可能只是不方便的命名重叠。
【解决方案2】:

MIB_IF_TYPE_LOOPBACK 可能指的是环回地址 127.0.0.1。如果适配器具有静态(或可配置)MAC 地址(以太网地址),则应该可以确定适配器是否为 Microsoft 环回适配器。或者它没有?

【讨论】:

    【解决方案3】:

    使用 WMI,请参阅WMI Code Creator v1.0 的示例:

    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery( _
        "SELECT * FROM Win32_PerfRawData_Tcpip_TCP",,48) 
    For Each objItem in colItems 
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Win32_PerfRawData_Tcpip_TCP instance"
        Wscript.Echo "-----------------------------------"
        Wscript.Echo "Name: " & objItem.Name
    Next
    

    【讨论】:

      【解决方案4】:

      我可以通过查看IP_ADAPTER_ADDRESSES 结构的IfType 成员来检测环回适配器。如果是IF_TYPE_SOFTWARE_LOOPBACK,那么适配器就是环回适配器。在 Windows 7 和 10 上运行良好。

      【讨论】:

        【解决方案5】:

        您可以使用 WMI 检查每个网络接口的驱动程序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2017-07-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多