代码之家  ›  专栏  ›  技术社区  ›  jossgray

从GetAdapterAddresses()获取子网掩码

  •  13
  • jossgray  · 技术社区  · 11 年前

    我正在使用 GetAdapterAddresses() 方法获取系统上所有接口的ip地址。

    我需要找到每个接口的广播地址。我可以使用IP地址和子网掩码来计算,但在IP_ADAPTER_ADDRESSES结构中看不到子网掩码。

    是否有任何方法可以使用 获取适配器地址() ?

    1 回复  |  直到 11 年前
        1
  •  20
  •   Remy Lebeau    11 年前

    GetAdapterAddresses() 仅在Vista和更高版本上提供子网掩码。

    在通过 FirstUnicastAddress 的字段 IP_ADAPTER_ADDRESSES 记录 IP_ADAPTER_UNICAST_ADDRESS 记录包括 OnLinkPrefixLength 领域此字段在Vista之前的系统上不可用。此字段是子网掩码的长度,单位为位。对于IPv4单播地址,可以使用 ConvertLengthToIpv4Mask() 转换 OnLink前缀长度 值转换为子网掩码,然后可以根据需要使用该掩码来屏蔽单播IPv4地址。

    在Vista之前的系统上,使用 GetIpAddrTable() 以获取可用IPv4接口的列表。这个 MIB_IPADDRROW 记录包含 dwAddr IPv4地址字段,a dwMask 子网掩码字段,以及 dwBCastAddr 广播地址字段。您可以在该表中循环查找报告的每个单播IPv4地址 获取适配器地址() ,然后您将拥有其关联的子网掩码和广播IP地址。