Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.09.2015, 11:18   #1
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию C WinAPI RAS L2TP-запись - где лежит pre-shared key?

Всем привет.

Я реализовываю впн-соединения с помощью встроенного RAS API. В общем, нужно добавить запись в RasBook и позвонить по ней. С PPTP все хорошо. А вот L2TP требует дополнительно pre-shared key.

Поискав по форуму наткнулся на такой с отсылкой на эту доку.
Увидел из релевантного только параметры типа L2tp-only или флаг UsePresharedKey.
Вот сам флаг меня всегда и смущал - флаг-то есть, а куда данные писать?

Ну вот пример кода по генерации RAS-записи:

Код:
// ...
// RasEntry достал, заполнил.
// Вх: connetion_type, preshared_key
    switch(connection_type)
    {
        case PPTP:
            strcpy(device_name_mask, "PPTP");
            dwVpnStrategy = VS_PptpOnly;
            break;
        case L2TP:
            if (preshared_key == 0 || strlen(preshared_key) == 0)
            {
                printf("CRITICAL: preshared key not set.");
                return 1;
            }
            else
            {
                preshared_key_valid = TRUE;
            }
            strcpy(device_name_mask, "L2TP");
            dwVpnStrategy = VS_L2tpOnly;
            break;
    }

    lpRasEntry->dwfNetProtocols |= RASNP_Ip;
    lpRasEntry->dwFramingProtocol = RASFP_Ppp;
    lstrcpy(lpRasEntry->szDeviceType, RASDT_Vpn);
    lstrcpy(lpRasEntry->szDeviceName, ras_devices[i].szDeviceName);
    lstrcpy(lpRasEntry->szLocalPhoneNumber, server_address);
    lpRasEntry->dwVpnStrategy = dwVpnStrategy; // VS_PptpOnly; VS_SstpOnly

    if (preshared_key_valid)
    { 
        // взял где-то пример, без пояснений
        L2TP_CONFIG_DATA* data = GlobalAlloc(GPTR, sizeof(L2TP_CONFIG_DATA));
        lpRasEntry->dwfOptions2 |= RASEO2_UsePreSharedKey;
        data->dwOffsetKey = 16;
        memcpy((PBYTE)data + data->dwOffsetKey, preshared_key, strlen(preshared_key));
        data->dwAuthType =L2TP_IPSEC_AUTH_PRESHAREDKEY;

        RasSetCustomAuthData(NULL, APP_NAME, data, sizeof(L2TP_CONFIG_DATA));

    }
}
Просто генерирую запись и смотрю уже как пользователь - L2TP-Only в ней указан, поле для prehsred key готово к вводу, т.к. флаг UsePresharedKey установлен, но куда уходят данные с этого поля - непонятно.
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 10.09.2015, 11:53   #2
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

В общем, этот код решает проблему

Код:
    // l2tp
    if (preshared_key_valid)
    {
        RASCREDENTIALS ras_cre_psk = {0};
		ras_cre_psk.dwSize = sizeof(ras_cre_psk);
        ras_cre_psk.dwMask = 0x00000010; //RASCM_PreSharedKey;
		wcscpy(ras_cre_psk.szPassword, preshared_key);
        if ((Ret = RasSetCredentials(NULL, APP_NAME, &ras_cre_psk, FALSE)))
        {
            printf("RasSetCredentials failed with error %d\n", Ret);
            return Ret;
        }
    }
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 10.09.2015, 11:56   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Спасибо что выложил решение.
Очень может быть, что пригодится.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Переустановить "RAS Async Adapter" (RAS асинхронный адаптер) Vicshann Windows 0 14.08.2014 06:53
Где лежит файл wand.dat в Windows 7 и XP? Кортана Свободное общение 11 23.01.2013 23:30
textarea <pre></pre> gunsoy HTML и CSS 12 09.11.2011 10:41
Violation of primary key constraint .Cannot insert duplicate key in object Как избавиться? SlimFIT БД в Delphi 4 28.12.2010 06:46
Где прочитать про WinApi? jurij Win Api 1 27.05.2008 13:32