我使用GetAdapterAddresses()
方法获取系统上所有接口的IP地址。
我需要找到每个接口的广播地址。我可以使用IP地址和子网掩码来计算,但是我无法在IP_ADAPTER_ADDRESSES结构中看到子网掩码。
有没有办法使用GetAdapterAddresses()
检索子网掩码?
答案 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地址。