#include <iostream>
#include <windows.h>
#include <stdio.h>
#include <Ras.h>
#pragma comment(lib,"rasapi32.lib")
enum VPN_TYPE
{
pptp,
l2tp_psk,
l2tp_cert,
ikev2_eap,
ikev2_cert,
};
void MYRasDial::createvpn() {
const wchar_t* name = this->_name;
const wchar_t* server = this->_server;
const wchar_t* username = this->_username;
const wchar_t* password = this->_password;
const wchar_t* psk = this->_psk;
int type = this->_type;
DWORD size = 0;
RasGetEntryProperties(NULL, L"", NULL, &size, NULL, NULL);
LPRASENTRY pras = (LPRASENTRY)malloc(size);
memset(pras, 0, size);
pras->dwSize = size;
pras->dwType = RASET_Vpn;
pras->dwRedialCount = 1;
pras->dwRedialPause = 60;
pras->dwfNetProtocols = RASNP_Ip;
pras->dwEncryptionType = ET_Optional;
wcscpy_s(pras->szLocalPhoneNumber, server);
wcscpy_s(pras->szDeviceType, RASDT_Vpn);
pras->dwfOptions = RASEO_RemoteDefaultGateway;
if (pptp == type)
{
pras->dwfOptions |= RASEO_RequireEncryptedPw;
pras->dwVpnStrategy = VS_PptpOnly;
}
else if (l2tp_psk == type)
{
pras->dwVpnStrategy = VS_L2tpOnly;
pras->dwfOptions |= RASEO_RequireEncryptedPw;
pras->dwfOptions2 |= RASEO2_UsePreSharedKey;
}
else if (l2tp_cert == type)
{
pras->dwVpnStrategy = (VS_L2tpOnly);
pras->dwfOptions2 |= RASEO2_DisableIKENameEkuCheck;
}
else if (ikev2_eap == type)
{
pras->dwfOptions |= (RASEO_RequireDataEncryption | RASEO_RequireEAP | RASEO_RequireMsCHAP2);
pras->dwfOptions2 |= RASEO2_RequireMachineCertificates;
pras->dwVpnStrategy = VS_Ikev2Only;
}
else if (ikev2_cert == type)
{
pras->dwfOptions |= RASEO_RequireDataEncryption;
pras->dwfOptions2 |= RASEO2_RequireMachineCertificates;
pras->dwVpnStrategy = VS_Ikev2Only;
}
RasSetEntryProperties(NULL, name, pras, pras->dwSize, NULL, 0);
RASCREDENTIALS ras_cre = { 0 };
ras_cre.dwSize = sizeof(ras_cre);
ras_cre.dwMask = RASCM_UserName | RASCM_Password;
wcscpy_s(ras_cre.szUserName, username);
wcscpy_s(ras_cre.szPassword, password);
if (l2tp_psk == type)
{
RASCREDENTIALS ras_cre_psk = { 0 };
ras_cre_psk.dwSize = sizeof(ras_cre_psk);
ras_cre_psk.dwMask = RASCM_PreSharedKey;
wcscpy_s(ras_cre_psk.szPassword, psk);
RasSetCredentials(NULL, name, &ras_cre_psk, FALSE);
}
free(pras);
}
网友评论