Ошибка 1168 при подключении к Enteprise сети WiFi
C++, windows-application, wlanapi, qt
Здравствуйте!
Я хочу подключатся к сетям WiFi Enterprise через свою программу. Настроил Radius Server, поключение к сети через Windows работает. Но при подключении через программу пишет: ошибка 1168 (ERROR_NOT_FOUND). Если быть точнее, то такую ошибку возращает функция: WlanSetProfileEapXmlUserData.
Разрабатываю эту программу на Qt 5.9.8 (Windows 10).
Пример кода:
QString xmlProfile = "<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>" + profileName + "</name><SSIDConfig><SSID>" "<name>" + apName + "</name></SSID><nonBroadcast>" + checkHiddenAP(hiddenAP) + "</nonBroadcast></SSIDConfig><connectionType>ESS</connectionType><connectionMode>" + checkAutoConnection(isAutoConnection) + "</connectionMode><MSM><security><authEncryption><authentication>" + checkAuthentication(authAlgorithm) + "</authentication><encryption>" + checkEncryption(encryption) + "</encryption><useOneX>true</useOneX></authEncryption><PMKCacheMode>enabled</PMKCacheMode><PMKCacheTTL>720</PMKCacheTTL><PMKCacheSize>128</PMKCacheSize>" "<preAuthMode>disabled</preAuthMode><OneX xmlns=\"http://www.microsoft.com/networking/OneX/v1\"><authMode>user</authMode><EAPConfig><EapHostConfig " "xmlns=\"http://www.microsoft.com/provisioning/EapHostConfig\"><EapMethod><Type xmlns=\"http://www.microsoft.com/provisioning/EapCommon\">25</Type><VendorId " "xmlns=\"http://www.microsoft.com/provisioning/EapCommon\">0</VendorId><VendorType xmlns=\"http://www.microsoft.com/provisioning/EapCommon\">0</VendorType>" "<AuthorId xmlns=\"http://www.microsoft.com/provisioning/EapCommon\">0</AuthorId></EapMethod>" "<Config xmlns=\"http://www.microsoft.com/provisioning/EapHostConfig\"><Eap xmlns=\"http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1\"><Type>25</Type>" "<EapType xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV1\"><ServerValidation>" "<DisableUserPromptForServerValidation>false</DisableUserPromptForServerValidation><ServerNames></ServerNames></ServerValidation>" "<FastReconnect>true</FastReconnect><InnerEapOptional>false</InnerEapOptional><Eap xmlns=\"http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1\"><Type>26</Type>" "<EapType xmlns=\"http://www.microsoft.com/provisioning/MsChapV2ConnectionPropertiesV1\"><UseWinLogonCredentials>false</UseWinLogonCredentials></EapType></Eap>" "<EnableQuarantineChecks>false</EnableQuarantineChecks><RequireCryptoBinding>false</RequireCryptoBinding><PeapExtensions><PerformServerValidation " "xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2\">true</PerformServerValidation><AcceptServerName " "xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2\">true</AcceptServerName><PeapExtensionsV2 " "xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2\"><AllowPromptingWhenServerCANotFound " "xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV3\">true</AllowPromptingWhenServerCANotFound></PeapExtensionsV2></PeapExtensions></EapType></Eap></Config>" "</EapHostConfig></EAPConfig></OneX><EapHostUserCredentials xmlns=\"http://www.microsoft.com/provisioning/EapHostUserCredentials\" " "xmlns:eapCommon=\"http://www.microsoft.com/provisioning/EapCommon\" xmlns:baseEap=\"http://www.microsoft.com/provisioning/BaseEapMethodUserCredentials\"><EapMethod>" "<eapCommon:Type>25</eapCommon:Type><eapCommon:AuthorId>0</eapCommon:AuthorId></EapMethod><Credentials xmlns:eapUser=\"http://www.microsoft.com/provisioning/EapUserPropertiesV1\" " "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:baseEap=\"http://www.microsoft.com/provisioning/BaseEapUserPropertiesV1\" " "xmlns:MsPeap=\"http://www.microsoft.com/provisioning/MsPeapUserPropertiesV1\" xmlns:MsChapV2=\"http://www.microsoft.com/provisioning/MsChapV2UserPropertiesV1\"><baseEap:Eap>" "<baseEap:Type>25</baseEap:Type><MsPeap:EapType><MsPeap:RoutingIdentity>" + apName + "</MsPeap:RoutingIdentity><baseEap:Eap><baseEap:Type>26</baseEap:Type><MsChapV2:EapType>" "<MsChapV2:Username>" + username + "</MsChapV2:Username><MsChapV2:Password>" + password + "</MsChapV2:Password></MsChapV2:EapType></baseEap:Eap></MsPeap:EapType></baseEap:Eap>" "</Credentials></EapHostUserCredentials></security></MSM></WLANProfile>"; LPCWSTR wlanProfile = reinterpret_cast<LPCWSTR>(profileName.utf16()); // profileName - это название Точки Доступа которую получаю через параметр функции. DWORD dwResult = WlanSetProfileEapXmlUserData(hClient, &adapterGUID, wlanProfile, WLAN_SET_EAPHOST_DATA_ALL_USERS, reinterpret_cast<LPCWSTR(xmlProfile).utf16()), nullptr); qDebug() << dwResult;
Подключения к персональной сети работают, там использую WlanSetProfile функцию. Проблема только если подключатся к корпоративной сети. Я думаю что проблема с неверным XML профилем. На сайте Microsoft, есть много примеров профилей, к примеру: https://docs.microsoft.com/en-us/windows/win32/nativewifi/wpa2-enterprise-with-peap-mschapv2-profile-sample и https://docs.microsoft.com/en-us/windows/win32/eaphost/peap-ms-chapv2-user-properties Как думаете в чем может быть проблема? Или где можно узнать какой профиль нужен? Спасибо за помощь.
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
- Akiv Doros
- 12 листопада 2024 р. 01:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
- molni99
- 26 жовтня 2024 р. 11:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
- molni99
- 26 жовтня 2024 р. 11:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Единственное, что приходит на ум, так то, что конткатенация строк может что-то попортить. Лучше собирать строку с использованием arg()
Попробуйте ещё через wirshark посмотреть, что вообще в пакетах ходит для вашей программы и для какой-нибудь сторонней, может чего не хватает.
Хорошо. Я это проверю. Спасибо.
Здравствуйте!
Я уже решил эту проблему:
Это все хорошо, но я получаю еще одну проблему: 229377 («Операция была отменена.»)
Это был код причины (reason code), который сообщает о коде ошибки 229377. Я думаю, что он вернул такой код, потому что я открыл Windows WiFi Manager из панели задач. Фактически NotificationCode возвращает код 8 (wlan_notification_acm_scan_fail), а затем 11 (wlan_notification_acm_connection_attempt_fail). Я все еще исследую эту проблему. Спасибо.
Здравствуйте!
Я исправил эту проблему. Проблема заключалась в том, что для PerformServerValidation было задано значение true, и в ОС отображалось диалоговое окно уведомлений для проверки сертификата в Windows, поэтому он вернул wlan_notification_acm_scan_fail «Операция прошла успешно».
Установка значения параметра PerformServerValidation в значение false устранила проблему (функция WlanSetProfile).
Также для функции WlanSetProfileEapXmlUserData я предоставил этот профиль:
Теперь программа успешно подключается к корпоративной сети. Проблема решена. Спасибо.