Название: Как создать VPN l2tp соединение?
Отправлено: Robie от Февраль 03, 2013, 15:04
Здравствуйте!
Хочу спросить знающих как решить эту проблемму... Пишу под ОС Windows, надо создать и подключится по VPN l2tp... Гуглинг не помагает, к сожилению, единственное что нашел - так это использовать RAS API... Но как ее использовать правильно?! :-[ примеров так и не нашел...задайте пинком правильное направление движения :)
Заранее благодарю за помощь
Название: Re: Как создать VPN l2tp соединение?
Отправлено: Robie от Февраль 04, 2013, 00:21
:-\ неужели никто никогдане создавал VPN соединение?!
Название: Re: Как создать VPN l2tp соединение?
Отправлено: Bepec от Февраль 04, 2013, 09:03
VPN как бы сложная тема, на мой взгляд. Видимо специалистов в данной области у нас не наблюдается. Будете первым :D
Название: Re: Как создать VPN l2tp соединение?
Отправлено: Командор от Февраль 04, 2013, 11:16
Лет 5 назад делал подобное (звонилка для провайдера) #define WINVER 0x0501 #define _WIN32_WINNT 0x0501 #pragma comment(lib, "rasapi32.lib") #pragma comment(lib, "Mpr.lib")
#include <windows.h> #include <windowsx.h> #include <ras.h> #include <shellapi.h> #include <commdlg.h> #include <rasdlg.h> #include <raserror.h> #include <commctrl.h> #include <string> #include <sstream>
using namespace std;
class Vpn { private: DWORD dwRet; HRASCONN connection;
public: LPCWSTR vpnName; LPCWSTR vpnAdress; LPCWSTR vpnLogin; LPCWSTR vpnPassword;
Vpn() { vpnName = TEXT("VPN-connection"); vpnAdress = TEXT(""); vpnLogin = TEXT("client1"); vpnPassword = TEXT("client1"); }
void create() { RASENTRY RS; memset(&RS, 0, sizeof(RASENTRY)); RS.dwSize = sizeof(RS); RS.dwfOptions = //RASEO_PreviewUserPw | //RASEO_ModemLights | // RASEO_PreviewDomain | // отображать поле "Домен" в окне ввода пользователя и пароля (вкладка "Параметры" - установить флажок "Включать домен входа в Windows") RASEO_ShowDialingProgress | // вкладка "Параметры" - Параметры набора номера: установить флажок "Отображать ход подключения" RASEO_RemoteDefaultGateway | // вкладка "Сеть" - "Протокол Интернета (TCP/IP)" - кнопка "Дополнительно" - установить флажок "Использовать основной шлюз в удаленной сети" RASEO_SwCompression | // вкладка "Сеть" - кнопка "Параметры" - установить флажок "Использовать программное сжатие данных" // RASEO_RequirePAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Незашифрованный пароль (PAP)" // RASEO_RequireSPAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Shiva (SPAP)" RASEO_RequireCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля CHAP" // RASEO_RequireMsCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Microsoft (MS-CHAP)" // RASEO_RequireW95MSCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Разрешить старый протокол MS-CHAP для Windows 95" RASEO_RequireMsCHAP2 | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Microsoft (MS-CHAP v2)" RASEO_SecureLocalFiles; // вкладка "Сеть" - Компоненты, используемые этим подключением: снять флажок "Использовать основной шлюз в удаленной сети"; RS.dwfOptions2 = RASEO2_DontNegotiateMultilink | RASEO2_ReconnectIfDropped; RS.dwfNetProtocols = RASNP_Ip; // протокол Интернета RS.dwFramingProtocol = RASFP_Ppp; // протокол Point-to-Point Protocol RS.dwType = RASET_Vpn; // тип подключения RASET_Broadband RS.dwVpnStrategy = VS_Default; // вкладка "Сеть" - По умолчанию RS.dwEncryptionType = ET_Optional; // параметры шифрования (ET_None, ET_Require, ET_RequireMax, ET_Optional) RS.dwDialMode = RASEDM_DialAll; RS.dwRedialCount = 99; // число повторов набора номера RS.dwRedialPause = 120; // интервал между повторениями lstrcpy(RS.szLocalPhoneNumber, vpnAdress); lstrcpy(RS.szDeviceType, TEXT("VPN")); // RASDT_PPPoE - обуславливает тип подключения (PPPoE) lstrcpy(RS.szDeviceName, TEXT("VPN"));
dwRet = RasSetEntryProperties(NULL, vpnName, &RS, sizeof(RS), NULL, 0); }
void open() { RASDIALPARAMS dial_params; dial_params.dwSize = sizeof(RASDIALPARAMS); wcscpy(dial_params.szEntryName, vpnName); wcscpy(dial_params.szPhoneNumber, L""); wcscpy(dial_params.szCallbackNumber, L""); wcscpy(dial_params.szUserName, vpnLogin); wcscpy(dial_params.szPassword, vpnPassword); wcscpy(dial_params.szDomain, L""); dial_params.dwSubEntry = 0; dial_params.dwCallbackId = 0; connection = NULL; dwRet = RasDial(NULL, NULL, &dial_params, 0, NULL, &connection); }
void hangUp() { RASCONN ras[20]; DWORD dSize, dNumber;
ras[0].dwSize = sizeof(RASCONN); dSize = sizeof( ras ); dwRet = RasEnumConnections(ras, &dSize, &dNumber); if (dwRet != 0) { return; } for (DWORD dCount = 0; dCount < dNumber; dCount++) { if (!_wcsicmp(ras[dCount].szEntryName, vpnName)) { HRASCONN hRasConn = ras[dCount].hrasconn; dwRet = RasHangUp(hRasConn); if (dwRet == 0) //Info("Информация", "Cоединение разорвано"); int i = 0; } } }
void start() { open(); if (dwRet != 0) { if (dwRet == ERROR_CANNOT_FIND_PHONEBOOK_ENTRY) { create(); // Если соединения нет, то создаем if (dwRet != 0) //Info("Ошибка", "Невозможно создать VPN-соединение"); int i = 0; else open(); } } if (dwRet == 0) //Info("Информация", "Установлено соединение"); int i = 0; else //Info("Ошибка", "Невозможно установить VPN-соединение"); int i = 0; } };
Название: Re: Как создать VPN l2tp соединение?
Отправлено: Robie от Февраль 04, 2013, 21:11
VPN как бы сложная тема, на мой взгляд. Видимо специалистов в данной области у нас не наблюдается. Будете первым :D
;) Главное чтобы стал успешным первопроходцем :D
Название: Re: Как создать VPN l2tp соединение?
Отправлено: Robie от Февраль 04, 2013, 21:12
Лет 5 назад делал подобное (звонилка для провайдера) #define WINVER 0x0501 #define _WIN32_WINNT 0x0501 #pragma comment(lib, "rasapi32.lib") #pragma comment(lib, "Mpr.lib")
#include <windows.h> #include <windowsx.h> #include <ras.h> #include <shellapi.h> #include <commdlg.h> #include <rasdlg.h> #include <raserror.h> #include <commctrl.h> #include <string> #include <sstream>
using namespace std;
class Vpn { private: DWORD dwRet; HRASCONN connection;
public: LPCWSTR vpnName; LPCWSTR vpnAdress; LPCWSTR vpnLogin; LPCWSTR vpnPassword;
Vpn() { vpnName = TEXT("VPN-connection"); vpnAdress = TEXT(""); vpnLogin = TEXT("client1"); vpnPassword = TEXT("client1"); }
void create() { RASENTRY RS; memset(&RS, 0, sizeof(RASENTRY)); RS.dwSize = sizeof(RS); RS.dwfOptions = //RASEO_PreviewUserPw | //RASEO_ModemLights | // RASEO_PreviewDomain | // отображать поле "Домен" в окне ввода пользователя и пароля (вкладка "Параметры" - установить флажок "Включать домен входа в Windows") RASEO_ShowDialingProgress | // вкладка "Параметры" - Параметры набора номера: установить флажок "Отображать ход подключения" RASEO_RemoteDefaultGateway | // вкладка "Сеть" - "Протокол Интернета (TCP/IP)" - кнопка "Дополнительно" - установить флажок "Использовать основной шлюз в удаленной сети" RASEO_SwCompression | // вкладка "Сеть" - кнопка "Параметры" - установить флажок "Использовать программное сжатие данных" // RASEO_RequirePAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Незашифрованный пароль (PAP)" // RASEO_RequireSPAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Shiva (SPAP)" RASEO_RequireCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля CHAP" // RASEO_RequireMsCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Microsoft (MS-CHAP)" // RASEO_RequireW95MSCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Разрешить старый протокол MS-CHAP для Windows 95" RASEO_RequireMsCHAP2 | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Microsoft (MS-CHAP v2)" RASEO_SecureLocalFiles; // вкладка "Сеть" - Компоненты, используемые этим подключением: снять флажок "Использовать основной шлюз в удаленной сети"; RS.dwfOptions2 = RASEO2_DontNegotiateMultilink | RASEO2_ReconnectIfDropped; RS.dwfNetProtocols = RASNP_Ip; // протокол Интернета RS.dwFramingProtocol = RASFP_Ppp; // протокол Point-to-Point Protocol RS.dwType = RASET_Vpn; // тип подключения RASET_Broadband RS.dwVpnStrategy = VS_Default; // вкладка "Сеть" - По умолчанию RS.dwEncryptionType = ET_Optional; // параметры шифрования (ET_None, ET_Require, ET_RequireMax, ET_Optional) RS.dwDialMode = RASEDM_DialAll; RS.dwRedialCount = 99; // число повторов набора номера RS.dwRedialPause = 120; // интервал между повторениями lstrcpy(RS.szLocalPhoneNumber, vpnAdress); lstrcpy(RS.szDeviceType, TEXT("VPN")); // RASDT_PPPoE - обуславливает тип подключения (PPPoE) lstrcpy(RS.szDeviceName, TEXT("VPN"));
dwRet = RasSetEntryProperties(NULL, vpnName, &RS, sizeof(RS), NULL, 0); }
void open() { RASDIALPARAMS dial_params; dial_params.dwSize = sizeof(RASDIALPARAMS); wcscpy(dial_params.szEntryName, vpnName); wcscpy(dial_params.szPhoneNumber, L""); wcscpy(dial_params.szCallbackNumber, L""); wcscpy(dial_params.szUserName, vpnLogin); wcscpy(dial_params.szPassword, vpnPassword); wcscpy(dial_params.szDomain, L""); dial_params.dwSubEntry = 0; dial_params.dwCallbackId = 0; connection = NULL; dwRet = RasDial(NULL, NULL, &dial_params, 0, NULL, &connection); }
void hangUp() { RASCONN ras[20]; DWORD dSize, dNumber;
ras[0].dwSize = sizeof(RASCONN); dSize = sizeof( ras ); dwRet = RasEnumConnections(ras, &dSize, &dNumber); if (dwRet != 0) { return; } for (DWORD dCount = 0; dCount < dNumber; dCount++) { if (!_wcsicmp(ras[dCount].szEntryName, vpnName)) { HRASCONN hRasConn = ras[dCount].hrasconn; dwRet = RasHangUp(hRasConn); if (dwRet == 0) //Info("Информация", "Cоединение разорвано"); int i = 0; } } }
void start() { open(); if (dwRet != 0) { if (dwRet == ERROR_CANNOT_FIND_PHONEBOOK_ENTRY) { create(); // Если соединения нет, то создаем if (dwRet != 0) //Info("Ошибка", "Невозможно создать VPN-соединение"); int i = 0; else open(); } } if (dwRet == 0) //Info("Информация", "Установлено соединение"); int i = 0; else //Info("Ошибка", "Невозможно установить VPN-соединение"); int i = 0; } };
:)Хоть кто-то... Большущее спасибо!!! :)
Название: Re: Как создать VPN l2tp соединение?
Отправлено: Robie от Февраль 05, 2013, 00:44
Лет 5 назад делал подобное (звонилка для провайдера) #define WINVER 0x0501 #define _WIN32_WINNT 0x0501 #pragma comment(lib, "rasapi32.lib") #pragma comment(lib, "Mpr.lib")
#include <windows.h> #include <windowsx.h> #include <ras.h> #include <shellapi.h> #include <commdlg.h> #include <rasdlg.h> #include <raserror.h> #include <commctrl.h> #include <string> #include <sstream>
using namespace std;
class Vpn { private: DWORD dwRet; HRASCONN connection;
public: LPCWSTR vpnName; LPCWSTR vpnAdress; LPCWSTR vpnLogin; LPCWSTR vpnPassword;
Vpn() { vpnName = TEXT("VPN-connection"); vpnAdress = TEXT(""); vpnLogin = TEXT("client1"); vpnPassword = TEXT("client1"); }
void create() { RASENTRY RS; memset(&RS, 0, sizeof(RASENTRY)); RS.dwSize = sizeof(RS); RS.dwfOptions = //RASEO_PreviewUserPw | //RASEO_ModemLights | // RASEO_PreviewDomain | // отображать поле "Домен" в окне ввода пользователя и пароля (вкладка "Параметры" - установить флажок "Включать домен входа в Windows") RASEO_ShowDialingProgress | // вкладка "Параметры" - Параметры набора номера: установить флажок "Отображать ход подключения" RASEO_RemoteDefaultGateway | // вкладка "Сеть" - "Протокол Интернета (TCP/IP)" - кнопка "Дополнительно" - установить флажок "Использовать основной шлюз в удаленной сети" RASEO_SwCompression | // вкладка "Сеть" - кнопка "Параметры" - установить флажок "Использовать программное сжатие данных" // RASEO_RequirePAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Незашифрованный пароль (PAP)" // RASEO_RequireSPAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Shiva (SPAP)" RASEO_RequireCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля CHAP" // RASEO_RequireMsCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Microsoft (MS-CHAP)" // RASEO_RequireW95MSCHAP | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Разрешить старый протокол MS-CHAP для Windows 95" RASEO_RequireMsCHAP2 | // вкладка "Безопасность" - "Дополнительные (выборочные параметры)" - установить флажок "Протокол проверки пароля Microsoft (MS-CHAP v2)" RASEO_SecureLocalFiles; // вкладка "Сеть" - Компоненты, используемые этим подключением: снять флажок "Использовать основной шлюз в удаленной сети"; RS.dwfOptions2 = RASEO2_DontNegotiateMultilink | RASEO2_ReconnectIfDropped; RS.dwfNetProtocols = RASNP_Ip; // протокол Интернета RS.dwFramingProtocol = RASFP_Ppp; // протокол Point-to-Point Protocol RS.dwType = RASET_Vpn; // тип подключения RASET_Broadband RS.dwVpnStrategy = VS_Default; // вкладка "Сеть" - По умолчанию RS.dwEncryptionType = ET_Optional; // параметры шифрования (ET_None, ET_Require, ET_RequireMax, ET_Optional) RS.dwDialMode = RASEDM_DialAll; RS.dwRedialCount = 99; // число повторов набора номера RS.dwRedialPause = 120; // интервал между повторениями lstrcpy(RS.szLocalPhoneNumber, vpnAdress); lstrcpy(RS.szDeviceType, TEXT("VPN")); // RASDT_PPPoE - обуславливает тип подключения (PPPoE) lstrcpy(RS.szDeviceName, TEXT("VPN"));
dwRet = RasSetEntryProperties(NULL, vpnName, &RS, sizeof(RS), NULL, 0); }
void open() { RASDIALPARAMS dial_params; dial_params.dwSize = sizeof(RASDIALPARAMS); wcscpy(dial_params.szEntryName, vpnName); wcscpy(dial_params.szPhoneNumber, L""); wcscpy(dial_params.szCallbackNumber, L""); wcscpy(dial_params.szUserName, vpnLogin); wcscpy(dial_params.szPassword, vpnPassword); wcscpy(dial_params.szDomain, L""); dial_params.dwSubEntry = 0; dial_params.dwCallbackId = 0; connection = NULL; dwRet = RasDial(NULL, NULL, &dial_params, 0, NULL, &connection); }
void hangUp() { RASCONN ras[20]; DWORD dSize, dNumber;
ras[0].dwSize = sizeof(RASCONN); dSize = sizeof( ras ); dwRet = RasEnumConnections(ras, &dSize, &dNumber); if (dwRet != 0) { return; } for (DWORD dCount = 0; dCount < dNumber; dCount++) { if (!_wcsicmp(ras[dCount].szEntryName, vpnName)) { HRASCONN hRasConn = ras[dCount].hrasconn; dwRet = RasHangUp(hRasConn); if (dwRet == 0) //Info("Информация", "Cоединение разорвано"); int i = 0; } } }
void start() { open(); if (dwRet != 0) { if (dwRet == ERROR_CANNOT_FIND_PHONEBOOK_ENTRY) { create(); // Если соединения нет, то создаем if (dwRet != 0) //Info("Ошибка", "Невозможно создать VPN-соединение"); int i = 0; else open(); } } if (dwRet == 0) //Info("Информация", "Установлено соединение"); int i = 0; else //Info("Ошибка", "Невозможно установить VPN-соединение"); int i = 0; } };
:)Дружище, не знаю как тебе выразить свою благодарность, ты спас мой мозг от саморозплавления(сколько я намучился с ошибками в моем коде...)...а у тебя отличный код и все хорошо читается и что самое главное,- все работает!
Название: Re: Как создать VPN l2tp соединение?
Отправлено: Bepec от Февраль 05, 2013, 00:52
А если дальше хотите жить на форуме, отучайтесь цитировать простыни кода :)
|