Получить маску подсети из GetAdapterAddresses ()

Я использую GetAdapterAddresses() метод, чтобы получить IP-адреса всех интерфейсов в системе.

Мне нужно найти широковещательный адрес каждого интерфейса. Я могу рассчитать это, используя IP-адрес и маску подсети, но не вижу маски подсети в структуре IP_ADAPTER_ADDRESSES.

Есть ли способ получить маску подсети, используя GetAdapterAddresses()?

8

Решение

GetAdapterAddresses() предоставляет маски подсетей только в Vista и более поздних версиях.

При циклическом просмотре одноадресных адресов, на которые указывает FirstUnicastAddress поле IP_ADAPTER_ADDRESSES запись, IP_ADAPTER_UNICAST_ADDRESS запись включает в себя OnLinkPrefixLength поле. Это поле недоступно в системах до Vista. Это поле является длиной маски подсети в битах. Для одноадресных адресов IPv4 вы можете использовать ConvertLengthToIpv4Mask() преобразовать OnLinkPrefixLength значение в маску подсети, которую затем можно использовать для маскировки IPv4-адреса одноадресной рассылки по мере необходимости.

В системах до Vista, используйте GetIpAddrTable() получить список доступных интерфейсов IPv4. MIB_IPADDRROW запись содержит dwAddr поле для адреса IPv4, dwMask поле для маски подсети и dwBCastAddr поле для широковещательного адреса. Вы можете пройтись по этой таблице в поисках каждого одноадресного IPv4-адреса, сообщенного GetAdapterAddresses(), а затем вы будете иметь связанные с ними маски подсетей и широковещательные IP-адреса.

13

Другие решения


По вопросам рекламы [email protected]