从GetAdaptersAddresses()获取子网掩码

时间:2014-07-11 16:27:53

标签: c++ c winapi iphelper

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

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

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

1 个答案:

答案 0 :(得分:14)

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

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

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