ikev pptp

作者: 魔童转世 | 来源:发表于2020-07-17 16:07 被阅读0次
#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);
}

相关文章

网友评论

      本文标题:ikev pptp

      本文链接:https://www.haomeiwen.com/subject/ssnghktx.html