Получите IP-адрес сетевого устройства Windows wifi, размещенного на C++ (WLANAPI)
Я добавляю возможность в приложении создавать сеть, размещенную на Wi-Fi. Я наконец получил пример приложения, работающего с Windows 7 SDK.
Чего я не нахожу, так это встроенного способа получения IP-адреса устройства Wi-Fi, используемого для создания размещенной сети. Мне нужен этот адрес, чтобы привязать к нему сервер.
Единственный способ сделать это - использовать MAC-адрес устройства и сопоставить его с записью в списке всех сетевых устройств на машине? Это единственный способ? Будет ли это работать, так как устройство, размещенное на Wi-Fi, является виртуальным (согласно документации)?
Похоже, что способ (WlanHostedNetworkQueryStatus) получить MAC-адрес и GUID используемого устройства WLAN, но лучший способ превратить его в реальный IP-адрес ускользает от меня...
Я довольно новичок в разработке на C++ и Windows, так что, может быть, мне не хватает чего-то простого.
ОБНОВИТЬ --
В итоге я использовал IP Helper API для преобразования GUID WLAN в LUID, а затем LUID в индекс. Включенные заголовочные файлы немного раздражали, поскольку большая часть документации, по-видимому, предназначена для драйверов устройств. Те, что мне были нужны.
#include <windows.h>
#include <wlanapi.h>
#include <iphlpapi.h>
#include <netioapi.h>
Поскольку я использую Qt, я использовал индекс, чтобы получить QNetworkInterface, и из этого я получил адрес IPv4. Это было проще, чем вычисление NotifyAddrChange или NotifyIpInterfaceChange, хотя одним из них был бы способ, если вы просто используете Windows API.
1 ответ
WlanHostedNetworkQueryStatus
функция возвращает WLAN_HOSTED_NETWORK_STATUS
структура, которая имеет член IPDeviceID
, Документация для этого члена указывает:
Это член GUID виртуального беспроводного устройства, которое не будет доступно через вызовы функции WlanEnumInterfaces. Этот GUID может использоваться для вызова других сетевых функций более высокого уровня, которые используют GUID устройства (например, функции IP Helper).
Функции IP Helper имеют функцию ConvertInterfaceGuidToLuid
, который даст вам LUID
что вы можете использовать с функциями с другими функциями в этом списке.