从GetAdapterAddresses()获取子网掩码

jos*_*ray 9 c c++ winapi iphelper

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

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

有没有办法检索子网掩码使用GetAdapterAddresses()

Rem*_*eau 15

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

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

在Vista之前的系统上,用于GetIpAddrTable()获取可用IPv4接口的列表.该MIB_IPADDRROW记录包含dwAddrIPv4地址的dwMask字段,子网掩码的dwBCastAddr字段和广播地址的字段.您可以遍历该表,查找报告的每个单播IPv4地址GetAdapterAddresses(),然后您将拥有其关联的子网掩码和广播IP地址.