C
Sept. 21, 2019, 7:08 p.m.

Ошибка 1168 при подключении к Enteprise сети WiFi

C++, windows-application, wlanapi, qt

Здравствуйте!

Я хочу подключатся к сетям WiFi Enterprise через свою программу. Настроил Radius Server, поключение к сети через Windows работает. Но при подключении через программу пишет: ошибка 1168 (ERROR_NOT_FOUND). Если быть точнее, то такую ошибку возращает функция: WlanSetProfileEapXmlUserData.
Разрабатываю эту программу на Qt 5.9.8 (Windows 10).

Пример кода:

  1. QString xmlProfile = "<?xml version=\"1.0\"?><WLANProfile xmlns=\"http://www.microsoft.com/networking/WLAN/profile/v1\"><name>" + profileName + "</name><SSIDConfig><SSID>"
  2. "<name>" + apName + "</name></SSID><nonBroadcast>" + checkHiddenAP(hiddenAP) + "</nonBroadcast></SSIDConfig><connectionType>ESS</connectionType><connectionMode>" +
  3. checkAutoConnection(isAutoConnection) + "</connectionMode><MSM><security><authEncryption><authentication>" + checkAuthentication(authAlgorithm) + "</authentication><encryption>" +
  4. checkEncryption(encryption) + "</encryption><useOneX>true</useOneX></authEncryption><PMKCacheMode>enabled</PMKCacheMode><PMKCacheTTL>720</PMKCacheTTL><PMKCacheSize>128</PMKCacheSize>"
  5. "<preAuthMode>disabled</preAuthMode><OneX xmlns=\"http://www.microsoft.com/networking/OneX/v1\"><authMode>user</authMode><EAPConfig><EapHostConfig "
  6. "xmlns=\"http://www.microsoft.com/provisioning/EapHostConfig\"><EapMethod><Type xmlns=\"http://www.microsoft.com/provisioning/EapCommon\">25</Type><VendorId "
  7. "xmlns=\"http://www.microsoft.com/provisioning/EapCommon\">0</VendorId><VendorType xmlns=\"http://www.microsoft.com/provisioning/EapCommon\">0</VendorType>"
  8. "<AuthorId xmlns=\"http://www.microsoft.com/provisioning/EapCommon\">0</AuthorId></EapMethod>"
  9. "<Config xmlns=\"http://www.microsoft.com/provisioning/EapHostConfig\"><Eap xmlns=\"http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1\"><Type>25</Type>"
  10. "<EapType xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV1\"><ServerValidation>"
  11. "<DisableUserPromptForServerValidation>false</DisableUserPromptForServerValidation><ServerNames></ServerNames></ServerValidation>"
  12. "<FastReconnect>true</FastReconnect><InnerEapOptional>false</InnerEapOptional><Eap xmlns=\"http://www.microsoft.com/provisioning/BaseEapConnectionPropertiesV1\"><Type>26</Type>"
  13. "<EapType xmlns=\"http://www.microsoft.com/provisioning/MsChapV2ConnectionPropertiesV1\"><UseWinLogonCredentials>false</UseWinLogonCredentials></EapType></Eap>"
  14. "<EnableQuarantineChecks>false</EnableQuarantineChecks><RequireCryptoBinding>false</RequireCryptoBinding><PeapExtensions><PerformServerValidation "
  15. "xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2\">true</PerformServerValidation><AcceptServerName "
  16. "xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2\">true</AcceptServerName><PeapExtensionsV2 "
  17. "xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2\"><AllowPromptingWhenServerCANotFound "
  18. "xmlns=\"http://www.microsoft.com/provisioning/MsPeapConnectionPropertiesV3\">true</AllowPromptingWhenServerCANotFound></PeapExtensionsV2></PeapExtensions></EapType></Eap></Config>"
  19. "</EapHostConfig></EAPConfig></OneX><EapHostUserCredentials xmlns=\"http://www.microsoft.com/provisioning/EapHostUserCredentials\" "
  20. "xmlns:eapCommon=\"http://www.microsoft.com/provisioning/EapCommon\" xmlns:baseEap=\"http://www.microsoft.com/provisioning/BaseEapMethodUserCredentials\"><EapMethod>"
  21. "<eapCommon:Type>25</eapCommon:Type><eapCommon:AuthorId>0</eapCommon:AuthorId></EapMethod><Credentials xmlns:eapUser=\"http://www.microsoft.com/provisioning/EapUserPropertiesV1\" "
  22. "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:baseEap=\"http://www.microsoft.com/provisioning/BaseEapUserPropertiesV1\" "
  23. "xmlns:MsPeap=\"http://www.microsoft.com/provisioning/MsPeapUserPropertiesV1\" xmlns:MsChapV2=\"http://www.microsoft.com/provisioning/MsChapV2UserPropertiesV1\"><baseEap:Eap>"
  24. "<baseEap:Type>25</baseEap:Type><MsPeap:EapType><MsPeap:RoutingIdentity>" + apName + "</MsPeap:RoutingIdentity><baseEap:Eap><baseEap:Type>26</baseEap:Type><MsChapV2:EapType>"
  25. "<MsChapV2:Username>" + username + "</MsChapV2:Username><MsChapV2:Password>" + password + "</MsChapV2:Password></MsChapV2:EapType></baseEap:Eap></MsPeap:EapType></baseEap:Eap>"
  26. "</Credentials></EapHostUserCredentials></security></MSM></WLANProfile>";
  27.  
  28. LPCWSTR wlanProfile = reinterpret_cast<LPCWSTR>(profileName.utf16()); // profileName - это название Точки Доступа которую получаю через параметр функции.
  29.  
  30. DWORD dwResult = WlanSetProfileEapXmlUserData(hClient, &adapterGUID, wlanProfile, WLAN_SET_EAPHOST_DATA_ALL_USERS, reinterpret_cast<LPCWSTR(xmlProfile).utf16()), nullptr);
  31. 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 Как думаете в чем может быть проблема? Или где можно узнать какой профиль нужен? Спасибо за помощь.

2

Do you like it? Share on social networks!

4
Evgenii Legotckoi
  • Sept. 27, 2019, 12:42 p.m.

Единственное, что приходит на ум, так то, что конткатенация строк может что-то попортить. Лучше собирать строку с использованием arg()

  1. QString finalString = QString("%1 %1").arg("first", "second");

Попробуйте ещё через wirshark посмотреть, что вообще в пакетах ходит для вашей программы и для какой-нибудь сторонней, может чего не хватает.

    C
    • Sept. 27, 2019, 2:10 p.m.

    Хорошо. Я это проверю. Спасибо.

      C
      • Sept. 30, 2019, 1:18 a.m.
      • (edited)

      Здравствуйте!

      Я уже решил эту проблему:

      1. Установите профиль без учетных данных, используя WlanSetProfile (я использовал импортированный профиль из netsh с некоторыми изменениями)
      2. Затем установите ниже профиль xml с вашим именем пользователя и паролем WlanSetProfileEapXmlUserData:
      1. <?xml version="1.0" ?>
      2. <EapHostUserCredentials xmlns="http://www.microsoft.com/provisioning/EapHostUserCredentials"
      3. xmlns:eapCommon="http://www.microsoft.com/provisioning/EapCommon"
      4. xmlns:baseEap="http://www.microsoft.com/provisioning/BaseEapMethodUserCredentials">
      5. <EapMethod>
      6. <eapCommon:Type>26</eapCommon:Type>
      7. <eapCommon:AuthorId>0</eapCommon:AuthorId>
      8. </EapMethod>
      9. <Credentials xmlns:eapUser="http://www.microsoft.com/provisioning/EapUserPropertiesV1"
      10. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      11. xmlns:baseEap="http://www.microsoft.com/provisioning/BaseEapUserPropertiesV1"
      12. xmlns:MsPeap="http://www.microsoft.com/provisioning/MsPeapUserPropertiesV1"
      13. xmlns:MsChapV2="http://www.microsoft.com/provisioning/MsChapV2UserPropertiesV1">
      14. <baseEap:Eap>
      15. <baseEap:Type>26</baseEap:Type>
      16. <MsChapV2:EapType>
      17. <MsChapV2:Username>test</MsChapV2:Username>
      18. <MsChapV2:Password>test</MsChapV2:Password>
      19. </MsChapV2:EapType>
      20. </baseEap:Eap>
      21. </Credentials>
      22. </EapHostUserCredentials>
      1. Затем используйте функцию WlanConnect и функцию callback вызова для проверки соединения.

      Это все хорошо, но я получаю еще одну проблему: 229377 («Операция была отменена.»)

      Это был код причины (reason code), который сообщает о коде ошибки 229377. Я думаю, что он вернул такой код, потому что я открыл Windows WiFi Manager из панели задач. Фактически NotificationCode возвращает код 8 (wlan_notification_acm_scan_fail), а затем 11 (wlan_notification_acm_connection_attempt_fail). Я все еще исследую эту проблему. Спасибо.

        C
        • Oct. 1, 2019, 6:54 p.m.
        • The answer was marked as a solution.

        Здравствуйте!

        Я исправил эту проблему. Проблема заключалась в том, что для PerformServerValidation было задано значение true, и в ОС отображалось диалоговое окно уведомлений для проверки сертификата в Windows, поэтому он вернул wlan_notification_acm_scan_fail «Операция прошла успешно».

        Установка значения параметра PerformServerValidation в значение false устранила проблему (функция WlanSetProfile).

        1. <PerformServerValidation xmlns=\"http: //www.microsoft.com/provisioning/MsPeapConnectionPropertiesV2\">false</PerformServerValidation>

        Также для функции WlanSetProfileEapXmlUserData я предоставил этот профиль:

        1. <?xml version="1.0" ?>
        2. <EapHostUserCredentials
        3. xmlns="http://www.microsoft.com/provisioning/EapHostUserCredentials"
        4. xmlns:eapCommon="http://www.microsoft.com/provisioning/EapCommon"
        5. xmlns:baseEap="http://www.microsoft.com/provisioning/BaseEapMethodUserCredentials">
        6. <EapMethod>
        7. <eapCommon:Type>25</eapCommon:Type>
        8. <eapCommon:AuthorId>0</eapCommon:AuthorId>
        9. </EapMethod>
        10. <Credentials
        11. xmlns:eapUser="http://www.microsoft.com/provisioning/EapUserPropertiesV1"
        12. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        13. xmlns:baseEap="http://www.microsoft.com/provisioning/BaseEapUserPropertiesV1"
        14. xmlns:MsPeap="http://www.microsoft.com/provisioning/MsPeapUserPropertiesV1"
        15. xmlns:MsChapV2="http://www.microsoft.com/provisioning/MsChapV2UserPropertiesV1">
        16. <baseEap:Eap>
        17. <baseEap:Type>25</baseEap:Type>
        18. <MsPeap:EapType>
        19. <baseEap:Eap>
        20. <baseEap:Type>26</baseEap:Type>
        21. <MsChapV2:EapType>
        22. <MsChapV2:Username>username</MsChapV2:Username>
        23. <MsChapV2:Password>password</MsChapV2:Password>
        24. </MsChapV2:EapType>
        25. </baseEap:Eap>
        26. </MsPeap:EapType>
        27. </baseEap:Eap>
        28. </Credentials>
        29. </EapHostUserCredentials>

        Теперь программа успешно подключается к корпоративной сети. Проблема решена. Спасибо.

          Comments

          Only authorized users can post comments.
          Please, Log in or Sign up
          • Last comments
          • IscanderChe
            April 12, 2025, 5:12 p.m.
            Добрый день. Спасибо Вам за этот проект и отдельно за ответы на форуме, которые мне очень помогли в некоммерческих пет-проектах. Профессиональным программистом я так и не стал, но узнал мно…
          • AK
            April 1, 2025, 11:41 a.m.
            Добрый день. В данный момент работаю над проектом, где необходимо выводить звук из программы в определенное аудиоустройство (колонки, наушники, виртуальный кабель и т.д). Пишу на Qt5.12.12 поско…
          • Evgenii Legotckoi
            March 9, 2025, 9:02 p.m.
            К сожалению, я этого подсказать не могу, поскольку у меня нет необходимости в обходе блокировок и т.д. Поэтому я и не задавался решением этой проблемы. Ну выглядит так, что вам действитель…
          • VP
            March 9, 2025, 4:14 p.m.
            Здравствуйте! Я устанавливал Qt6 из исходников а также Qt Creator по отдельности. Все компоненты, связанные с разработкой для Android, установлены. Кроме одного... Когда пытаюсь скомпилиров…
          • ИМ
            Nov. 22, 2024, 9:51 p.m.
            Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…