提问人:jossgray 提问时间:7/12/2014 更新时间:7/12/2014 访问量:8726
从 GetAdapterAddresses() 获取子网掩码
Get subnet mask from GetAdapterAddresses()
问:
我正在使用该方法来获取系统上所有接口的 IP 地址。GetAdapterAddresses()
我需要找到每个接口的广播地址。我可以使用 IP 地址和子网掩码进行计算,但在IP_ADAPTER_ADDRESSES结构中看不到子网掩码。
有没有办法使用检索子网掩码?GetAdapterAddresses()
答:
22赞
Remy Lebeau
7/12/2014
#1
GetAdapterAddresses()
仅在 Vista 及更高版本上提供子网掩码。
在循环遍历IP_ADAPTER_ADDRESSES
记录的字段指向的单播地址时,IP_ADAPTER_UNICAST_ADDRESS
记录包含一个字段。此字段在 Vista 之前的系统上不可用。此字段是子网掩码的长度(以位为单位)。对于 IPv4 单播地址,可以使用 ConvertLengthToIpv4Mask()
将值转换为子网掩码,然后可以根据需要使用子网掩码来掩码单播 IPv4 地址。FirstUnicastAddress
OnLinkPrefixLength
OnLinkPrefixLength
在 Vista 之前的系统上,使用 GetIpAddrTable()
获取可用 IPv4 接口的列表。MIB_IPADDRROW
记录包含一个 IPv4 地址字段、一个子网掩码字段和一个广播地址字段。您可以遍历该表,查找 报告的每个单播 IPv4 地址,然后您将拥有其关联的子网掩码和广播 IP 地址。dwAddr
dwMask
dwBCastAddr
GetAdapterAddresses()
评论
0赞
jossgray
7/13/2014
有没有办法将返回的ULONG转换为字符串表示形式(如“255.255.255.0”)?ConvertLengthToIpv4Mask()
0赞
jossgray
7/13/2014
好的,我可以使用in_addr结构并inet_ntoa。谢谢。
1赞
Bryan
1/31/2015
顺便说一句,感谢您的精彩回答!只想补充一点,IP_ADAPTER_UNICAST_ADDRESS 的 MSDN 文档对于 Windows Embedded Compact 7 是错误的。msdn.microsoft.com/en-us/library/......它没有列出 OnLinkPrefixLength,但查看 .h 文件,它就在那里。我已经确认它在那里。(与较新版本相同)。它不存在于 CE 6 或更低版本(正确记录)中。
评论